据单元分析清楚,后面的技术设计才好搞。
★啥是数据单元
何谓数据单元捏?简单地说,每次生产者放到缓冲区的,就是一个数据单元;每次消费
者从缓冲区取出的,也是一个数据单元。对于前一个帖子中寄信的例子,我们可以把每一
封单独的信件看成是一个数据单元。
不过光这么介绍,太过于简单,无助于大伙儿分析出这玩意儿。所以,后面咱们来看一
下数据单元需要具备哪些特性。搞明白这些特性之后,就容易从复杂的业务逻辑中分析出
适合做数据单元的东西了。
★数据单元的特性
分析数据单元,需要考虑如下几个方面的特性:
◇关联到业务对象
首先,数据单元必须关联到某种业务对象。在考虑该问题的时候,你必须深刻理解当前
这个生产者/消费者模式所对应的业务逻辑,才能够作出合适的判断。
由于“寄信”这个业务逻辑比较简单,所以大伙儿很容易就可以判断出数据单元是啥。但
现实生活中,往往没这么乐观。大多数业务逻辑都比较复杂,当中包含的业务对象是层次
繁多、类型各异。在这种情况下,就不易作出决策了。
这一步很重要,如果选错了业务对象,会导致后续程序设计和编码实现的复杂度大为上
升,增加了开发和维护成本。
◇完整性
所谓完整性,就是在传输过程中,要保证该数据单元的完整。要么整个数据单元被传递
到消费者,要么完全没有传递到消费者。不允许出现部分传递的情形。
对于寄信来说,你不能把半封信放入邮筒;同样的,邮递员从邮筒中拿信,也不能只拿
出信的一部分。
◇独立性
所谓独立性,就是各个数据单元之间没有互相依赖,某个数据单元传输失败不应该影响
已经完成传输的单元;也不应该影响尚未传输的单元。
为啥会出现传输失败捏?假如生产者的生产速度在一段时间内一直超过消费者的处理速
度,那就会导致缓冲区不断增长并达到上限,之后的数据单元就会被丢弃。如果数据单元
相互独立,等到生产者的速度降下来之后,后续的数据单元继续处理,不会受到牵连;反
之,如果数据单元之间有某种耦合,导致被丢弃的数据单元会影响到后续其它单元的处理
那就会使程序逻辑变得非常复杂。
对于寄信来说,某封信弄丢了,不会影响后续信件的送达;当然更不会影响已经送达的