生产者消费者模型的学习

64 阅读2分钟

Created by Jerry Wang, last modified on Nov 12, 2014

PRODUCER: PROD2 is running
Thread: CONSUMER2 Consumer thread is running…
Thread: CONSUMER2 fetch data from linkedQueue… queue size: 0 - consumer2 试图从queue读取
PRODUCER: PROD3 is running
PRODUCER: PROD1 is running
Thread: CONSUMER1 Consumer thread is running…
Thread: CONSUMER1 fetch data from linkedQueue… queue size: 0 - consumer1试图从queue读取
Thread: PROD2 procedued data into queue: data:1 … - producer1生产了1个数据
PRODUCER: PROD2 is running
Thread: CONSUMER2 has consumed one data from queue: data:1 Queue sise: 0 - consumer2 消费了1个数据,消费之后queue 空了
Thread: PROD1 procedued data into queue: data:2 … - thread 1生产了第二个数据
PRODUCER: PROD1 is running
Thread: CONSUMER1 has consumed one data from queue: data:2 Queue sise: 0 - consumer1将第二个数据消费掉了
Thread: PROD3 procedued data into queue: data:3 … - producer生产了第三个数据
PRODUCER: PROD3 is running
Thread: CONSUMER2 fetch data from linkedQueue… queue size: 1
Thread: CONSUMER2 has consumed one data from queue: data:3 Queue sise: 0 - consumer消费了第三个数据
Thread: PROD2 procedued data into queue: data:4 … - producer生产了第四个数据:4
PRODUCER: PROD2 is running
Thread: CONSUMER1 fetch data from linkedQueue… queue size: 1
Thread: PROD1 procedued data into queue: data:5 … - producer生产了第5个数据:5
PRODUCER: PROD1 is running
Thread: PROD3 procedued data into queue: data:6 … - producer生产了第六个数据:6
PRODUCER: PROD3 is running
Thread: CONSUMER1 has consumed one data from queue: data:4 Queue sise: 1 - consumer1消费了4,queue里还剩5,6.
此时consumer1只能看见一个元素
Thread: CONSUMER2 fetch data from linkedQueue… queue size: 2 - consumer2能看见2个元素5,6
Thread: PROD2 procedued data into queue: data:7 … 7生产后,queue里3个元素5,6,7
Thread: PROD2 quit from producer thread
Thread: CONSUMER2 has consumed one data from queue: data:5 Queue sise: 2 -5被消费后,还剩6,7
Thread: PROD1 procedued data into queue: data:8 … - queue里有6,7,8
Thread: PROD1 quit from producer thread
Thread: CONSUMER1 fetch data from linkedQueue… queue size: 2
Thread: CONSUMER1 has consumed one data from queue: data:6 Queue sise: 2 - 6被消费后,还剩7,8
Thread: PROD3 procedued data into queue: data:9 … - 9被生产,queue里7,8,9
Thread: PROD3 quit from producer thread
Thread: CONSUMER2 fetch data from linkedQueue… queue size: 3
Thread: CONSUMER2 has consumed one data from queue: data:7 Queue sise: 2 - queue里还剩8,9
Thread: CONSUMER1 fetch data from linkedQueue… queue size: 2
Thread: CONSUMER1 has consumed one data from queue: data:8 Queue sise: 1 -queue里还剩9
Thread: CONSUMER2 fetch data from linkedQueue… queue size: 1
Thread: CONSUMER2 has consumed one data from queue: data:9 Queue sise: 0 - queue全部消费完,此时也没有生产者在运行
Thread: CONSUMER1 fetch data from linkedQueue… queue size: 0
Thread: CONSUMER2 fetch data from linkedQueue… queue size: 0
Thread: CONSUMER1 Consumer read queue timeout - 超时退出
Thread: CONSUMER1 consumer thread ends
Thread: CONSUMER2 Consumer read queue timeout - 超时退出
Thread: CONSUMER2 consumer thread ends
如果把consumer的read operation超时间隔改小,比如变成2毫秒,
clipboard1
则消费者等不及生产者往queue里放数据后就读超时退出了:
clipboard2
如果把生产者的生产数据的时间间隔改小,而scenario变为生产者将所有的数据预先生产完毕,然后消费者逐一消费。

git path: github.com/i042416/con…
clipboard3