正题
上一节中我们说到Zip可以将多个上游发送的事件组合起来发送给下游, 那大家有没有想过一个问题, 如果其中一个水管A发送事件特别快, 而另一个水管B 发送事件特别慢, 那就可能出现这种情况, 发得快的水管...它将每根水管发出的事件保存起来, 等两个水缸都有事件了之后就分别从水缸中取出一个事件来组合, 当其中一个水缸是空的时候就处于等待的状态.
题外话: 大家来分析一下这个水缸有什么特点呢?...这个时候上游每次调用emitter.onNext(i)其实就相当于直接调用了Consumer中的:
?
所以这个时候其实就是上游每延时2秒发送一次. 最终的结果也说明了这一切....当上下游工作在同一个线程中时, 这时候是一个同步的订阅关系, 也就是说上游每发送一个事件必须等到下游接收处理完了以后才能接着发送下一个事件....从图中我们可以看出, 同步和异步的区别仅仅在于是否有水缸.
相信通过这个例子大家对线程之间的通信也有了比较清楚的认知和理解.