一、问题描述
生产者-消费者问题是一个经典的进程同步问题,该问题最早由Dijkstra提出,用以演示他提出的信号量机制。
他要求设计在同一个进程地址空间内执行的两个线程。
生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。
消费者线程从缓冲区中获得物品,然后释放缓冲区。
当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。
当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来。
同理 本问题也是要求设计在同一个进程地址空间内执行的两个线程。
当车站售票厅达到20人上线时,必须等有人走出车站售票厅,车站售票厅外的购票者才可进入。就如上面
生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。此时厅外购票者进入大厅这个事件可以看做是一个生产者线程,而厅内购票者走出厅外这个事件就可以看做是一个消费者线程。如此问题迎刃而解。
任务:数据状态,lock,从DB中取数据给任务列表
进程:生产者、消费者、线程池,进程状态
指挥者:监控者
拉模式:进程主动拉数据(任务),一般没有监控者(监控线程),数据接收者或进程主动去拉数据(信息),需要知道服务端(域名)
推模式:监控者主动去推数据给进程,进程状态。数据提供者推数据给数据接收者,或进程。需要知道客户端。(注册、登记)