code.7z

一、概述

Worker-Thread 模式也称为 流水线模式,这种设计模式类似于工厂流水线,上游工作人员完成某个电子产品的组装之后,将半成品放到流水线传送带上,接下来的加工工作则会交给下游的工人。

线程池在某种意义上也算是 Worker-Thread模式的一种实现,线程池初始化时所创建的线程类似于在流水线等待工作的工人,提交给线程池的操作单元类似于需要加工的产品,而线程 的 run 方法相当于组装产品。

工人(线程)根据产品说明进行产品的组装(执行run方法)。这一整个流程叫做 worker-Thread

二、简单实现

根据上面的描述, Worker-Thread 主要有三个角色:

  • 流水线工人:用来对传送带上的产品进行加工
  • 流水线传送带:用于传送来自上游的产品
  • 产品组装说明书:用来说明该产品如何组装

    2.1、产品信息(包括信息和如何组装)

    03.png

2.2、worker-thread 操作图,如下

image.png

三、Worker-ThreadProducer-Consumer 区别

Worker-ThreadProducer-Consumer 类似,虽然两者都有生产的角色和消费的角色,但是仍然有区别。

3.1、Worker-Thread

来看一张 Worker-Thread 角色关系图
01.png
如图所示:

  • 左边:生产半成品产品的线程
    线程用来不断的往传送带上生产数据。
  • 右边:传送带(包括:工人(线程)、半成品产品)
    传送带(channel)一启动便同时拥有若干数量的工作(Worker)线程
    Worker 于 Channel 来说不是单纯的依赖关系,而是聚合的关系,channel 必须知道 worker 的存在

3.2、Producer-Consumer

来看一张 Producer-Consumer 角色关系图
02.png
如图所示:

ProducerConsumer 对于 Queue 都是依赖关系。

Producer 不断的生产数据放到 Queue 中,或者 Consumer 不断从 Queue 中获取数据,Queue 既不知道 Producer 的存在,也不知道 Consumer 的存在。

ConsumerQueue 的消费并不依赖于数据本省的方法,只是单纯的获取数据。(Worker-Thread 获取到数据之后,还调用了数据中的方法