阻塞与非阻塞

发布 : 2019-01-13 分类 : basics 浏览 : --

说完同步与异步,另一个自然的话题便是阻塞与非阻塞 。他们之间的关系其实一直都很暧昧,常常被纠缠在一起说,同步阻塞异步非阻塞 ,并且鲜有 同步非阻塞异步阻塞 的说法

其实,阻塞关系 也是某种 同异步关系 ,也就是说,阻塞 与否描述的对象依然是 过程之间的关系性,不一样的是 阻塞性 强调的是整体与局部 的关系,或者说 主过程与子过程 的关系

但是有一个可能比较奇怪的地方是,大多数情况下我们都可以说某个过程是阻塞的。然而讨论关系性时不应该需要至少两个过程么?好吧,这个问题来源于人们通常会忽视过程的执行背景,也就是这个阻塞的或者非阻塞的过程的母过程。

如果主过程可以不受子过程的影响继续进行,那么这个子过程相对主过程而言就是非阻塞的,反之则是阻塞的。

判定是阻塞的过程有两个条件:

  1. 该过程存在至少一个所属主过程,即被包含关系
  2. 该过程与主过程为同步关系

如果该过程与主过程之间为异步关系,则这是一个非阻塞过程。由于一个阻塞过程中涉及到同步关系,所以一般又有 同步阻塞 的说法,同理也有 异步非阻塞 的说法。

然而并不是说 同步非阻塞异步阻塞 一定就是错误的说法,而是参考背景与这个过程之间的关系有所不同,或者说多了一个旁系属主过程,这个过程与主过程之间有着同级关系。

当旁系过程与主过程之间为 同步关系,子过程与主过程 为异步关系时,可以认为 子过程与旁系过程之间为 同步非阻塞 关系;若旁系过程与主过程为 异步关系,子过程与主过程为 同步关系时,可以认为 子过程与旁系过程之间为 异步阻塞 关系。不过这时候讨论的过程已经偏离主过程,对于多数情况而言算是偏题=。= 最好还是拒绝用旁系过程来讨论与子过程之间的关系


完美的设计来源于自仿

本文作者 : hellflame
原文链接 : https://hellflame.github.io/2019/01/13/blocking-vs-non-blocking/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
留下足迹
点击通过issue留言