## 生产者消费者模式
就是在开发过程中,有一块专门负责数据的产生,一块专门负责数据的处理,中间使用一个缓冲区域来存放数据,这种模式就是生产者模式
优点:
**解耦**;使用了缓冲区之后生产者和消费者就解偶联了,两者不直接依赖,一方的代码发生变化另一方受到的影响就极为有限
**支持并发**:生产者不用依靠与消费者的处理速度;生产者直接把数据产生之后扔给缓冲区就行了,大大提高了生产者的速度,可以用来处理并发问题;而消费者来不及处理的数据可以暂时存放在缓冲区等待消费者慢慢处理
**数据单元**:数据单元是网络信息传输的基本单位;这里指的是每次生产者放到缓冲区的,就是一个数据单元;每次消费者从缓冲区取出的,也是一个数据单元
数据单元的特性:
**关联到业务对象**:数据单元必须关联到某种业务对象。在考虑该问题的时候,你必须深刻理解当前这个生产者/消费者模式所对应的业务逻辑,才能够作出合适的判断
**完整性**:就是在传输过程中,要保证该数据单元的完整。要么整个数据单元被传递到消费者,要么完全没有传递到消费者。不允许出现部分传递的情形
**独立性**:就是各个数据单元之间没有互相依赖,某个数据单元传输失败不应该影响已经完成传输的单元;也不应该影响尚未传输的单元(**数据传输失败的原因**:假如生产者的生产速度在一段时间内一直超过消费者的处理速度,那就会导致缓冲区不断增长并达到上限,之后的数据单元就会被丢弃。如果数据单元相互独立,等到生产者的速度降下来之后,后续的数据单元继续处理,不会受到牵连;反之,如果数据单元之间有某种耦合,导致被丢弃的数据单元会影响到后续其它单元的处理,那就会使程序逻辑变得非常复杂)
**颗粒度**:很多时候数据单元和业务对象是要一一对应的;有时出于性能等因素的考虑,也可能会把N个业务对象打包成一个数据单元。那么,这个N该如何取值就是颗粒度的考虑了。颗粒度的大小是有讲究的。太大的颗粒度可能会造成某种浪费;太小的颗粒度可能会造成性能问题。颗粒度的权衡要基于多方面的因素,以及一些经验值的考量 |
|