同步?异步?阻塞?非阻塞?到底有没有异步阻塞和异步非阻塞?

在网上关于synchronous(同步的), asynchronous(异步的), blocking(阻塞的)和non-blocking(非阻塞的)的概念有很多 不同说法,如果有人想要在网上开始了解这几个东西,怕是不能短时间内明白.因为实在是说法太多了.造成这个原因最主要是同一个术 语在不同上下文中有不同的意思,举个例子,演出的脚本跟计算机里面的脚本是一个意思吗?没错大部份人什么的时候连上下文都没有搞 清楚就开始解释了,所以今天就整理一下(可能会错,自己看看就好).

主要是针对4个上下文,也就是所谓的概念范围,平常生活中的,计算机I/O模型中的和并行计算4个方面进行总结.

在平常生活中

在计算机I/O模型中,以《Unix Network Programming Volume 1, Third Edition》中Chapter 6中的I/O Models为参考.首 先要说明一点,书中并没有把异步I/O,同步I/O拆分成同步,异步,I/O三个词.更没有提到{同步,异步} X {阻塞, 非阻塞}这些组合,当然 它也提到"five I/O models that are available to us under Unix",那不在Unix底下呢?所以不排除还真的可以这么组合,不 过本人经历,没有在谷歌的英文资源中找到过asynchronous blocking和asynchronous nonblocking这些组合的的I/O模型说法( asynchronous and nonblocking在tornado 文档上出现过一次,所以asynchronous nonblocking还好说,也能理解,没猜错的话 就是异步I/O模型的另外一个说法,但是asynchronous blocking是什么,想象不出来,墙内的资源倒是搜索到一大堆有这种说辞的).

在计算机的并行计算中, 参考

在计算机云中, 参考

最后,为什么写这篇文章是因为最近意外看到别的一些文章和答案,上面有一些超出我认知的东西,比如异步阻塞和异步非阻塞,而且还有很多人 在说这东西,看得我怀疑人生:"难道我以前学得东西错了?",可能性很大,于是我就各种找书,各种查维基百科,目的是为了给自己debug. 最后得出结论这些东西还是要结合上下文来理解,就像这里明显就是指异步I/O模型,最后的最后,没有异步阻塞模型,涉及I/O的时候不要 把模型名字里面的形容词拆开来理解.我猜大部份人都把并行计算中的同步异步放到I/O模型里面去理解了,所以才会有这种奇怪的组合, 而且本身阻塞I/O模型就单独是个模型了,不知道为何衍生出同步阻塞这种说法,其它模型同理,虽然不是错的,但这样很容易让初学的人产 生疑惑,而且用这种说法的人还有很多,十分容易让人对自己产生怀疑.特别是那个同步阻塞的说法,反正我对自己怀疑过.

Author: saltb0rn (asche34@outlook.com)

Date: 2018-07-30

Emacs 28.2 (Org mode 9.5.5)

Validate