code.7z
一、概述
Worker-Thread
模式也称为 流水线模式,这种设计模式类似于工厂流水线,上游工作人员完成某个电子产品的组装之后,将半成品放到流水线传送带上,接下来的加工工作则会交给下游的工人。
线程池在某种意义上也算是 Worker-Thread模式的一种实现,线程池初始化时所创建的线程类似于在流水线等待工作的工人,提交给线程池的操作单元类似于需要加工的产品,而线程 的 run 方法相当于组装产品。
工人(线程)根据产品说明进行产品的组装(执行run方法)。这一整个流程叫做 worker-Thread
二、简单实现
根据上面的描述, Worker-Thread 主要有三个角色:
2.2、worker-thread 操作图,如下
三、Worker-Thread
和 Producer-Consumer
区别
Worker-Thread
和 Producer-Consumer
类似,虽然两者都有生产的角色和消费的角色,但是仍然有区别。
3.1、Worker-Thread
来看一张 Worker-Thread
角色关系图
如图所示:
- 左边:生产半成品产品的线程
线程用来不断的往传送带上生产数据。 - 右边:传送带(包括:工人(线程)、半成品产品)
传送带(channel)一启动便同时拥有若干数量的工作(Worker)线程
Worker 于 Channel 来说不是单纯的依赖关系,而是聚合的关系,channel 必须知道 worker 的存在
3.2、Producer-Consumer
来看一张 Producer-Consumer
角色关系图
如图所示:
Producer
和 Consumer
对于 Queue
都是依赖关系。
Producer
不断的生产数据放到 Queue
中,或者 Consumer
不断从 Queue
中获取数据,Queue
既不知道 Producer
的存在,也不知道 Consumer
的存在。
Consumer
对 Queue
的消费并不依赖于数据本省的方法,只是单纯的获取数据。(Worker-Thread
获取到数据之后,还调用了数据中的方法)