阻塞与非阻塞
说完同步与异步,另一个自然的话题便是阻塞与非阻塞 。他们之间的关系其实一直都很暧昧,常常被纠缠在一起说,同步阻塞
、 异步非阻塞
,并且鲜有 同步非阻塞
、 异步阻塞
的说法
其实,阻塞关系 也是某种 同异步关系 ,也就是说,阻塞 与否描述的对象依然是 过程之间的关系性,不一样的是 阻塞性 强调的是整体与局部 的关系,或者说 主过程与子过程 的关系
但是有一个可能比较奇怪的地方是,大多数情况下我们都可以说某个过程是阻塞的。然而讨论关系性时不应该需要至少两个过程么?好吧,这个问题来源于人们通常会忽视过程的执行背景,也就是这个阻塞的或者非阻塞的过程的母过程。
如果主过程可以不受子过程的影响继续进行,那么这个子过程相对主过程而言就是非阻塞的,反之则是阻塞的。
判定是阻塞的过程有两个条件:
- 该过程存在至少一个所属主过程,即被包含关系
- 该过程与主过程为同步关系
如果该过程与主过程之间为异步关系,则这是一个非阻塞过程。由于一个阻塞过程中涉及到同步关系,所以一般又有 同步阻塞
的说法,同理也有 异步非阻塞
的说法。
然而并不是说 同步非阻塞
与 异步阻塞
一定就是错误的说法,而是参考背景与这个过程之间的关系有所不同,或者说多了一个旁系属主过程,这个过程与主过程之间有着同级关系。
当旁系过程与主过程之间为 同步关系,子过程与主过程 为异步关系时,可以认为 子过程与旁系过程之间为 同步非阻塞 关系;若旁系过程与主过程为 异步关系,子过程与主过程为 同步关系时,可以认为 子过程与旁系过程之间为 异步阻塞 关系。不过这时候讨论的过程已经偏离主过程,对于多数情况而言算是偏题=。= 最好还是拒绝用旁系过程来讨论与子过程之间的关系
完美的设计来源于自仿
本文作者 : hellflame
原文链接 : https://hellflame.github.io/2019/01/13/blocking-vs-non-blocking/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!