Producer-Consumer模型是一种为了加快系统响应数据的异步模型。
1.它试图解决什么问题?
系统中一些慢操作(例如网络IO,数据统计等等)会阻塞主进程的运行,从而使得系统的吞吐量大大降低。如果我们不需要即使得到这些慢操作的返回结果,那么我们可以使用异步的方式来解决这个问题。
2. 它的应用场景
例如邮件发送服务,日志打印,报表生成等。如果这些操作由系统直接处理,那会使当前线程等待很长的时间(会有造成程序卡死的假象)。如果系统的访问量很高,这种操作会占用大量系统资源,使得服务器资源耗尽。
3. 总体架构
Producer-Consumer模型通常是多对多的关系,即多个生产者对应多个消费者,他们之间通过共享一个队列来实现通信和同步。生产者负责把请求(例如发送短信的内容和手机号)放到队列中,消费者负责从队列中出去请求并作响应的处理(例如发送一条短信)。
注意消费者的数量依赖于具体情况,例如消费者需要做大量的数据统计任务那么消费者的数量因该和CPU核心的数量大体一致。如果消费者需要等待长时间的网络等待,则需要考虑系统的带宽。
4. Producer-Consumer模型的不足
首先这是一个异步模型,这意味着我们不能在当前线程得到返回的结果。
异步模型涉及到多个线程间的协作,也就是说数据需要在多个线程*享,并且保持数据状态的同步。
Producer-Consumer模型通常作为一个service来为系统提供服务。当系统停止的时候我们需要小心的关闭这个service,必须保证所有的请求都得到处理,并且所有的资源都得到释放。