为什么在RxJava中阻塞callstack被认为是不好的做法?

时间:2016-05-22 09:25:20

标签: rx-java

背压文档states

  

处理过度生产的Observable的另一种方法是阻止callstack(停止管理过度生产的Observable的线程)。这具有违背Rx的“反应性”和非阻塞模型的缺点。

有人能详细说明为什么这被认为是不好的做法?参考文献赞赏。

1 个答案:

答案 0 :(得分:2)

因为你可能最终阻塞一个线程,例如computation()调度程序,阻止其他流的部分或全部进展。第二个问题是背压和阻塞/解除阻塞并不能很好地相互配合。现在已删除的onBackpressureBlock已解决此问题,其中subscribeOn().onBackpressureBlock()的链工作但onBackpressureBlock().subscribeOn()处于死锁状态。

除非您必须处理遗留阻止IO或API,否则几乎总有一种方法可以非阻塞地执行操作。