怎样理解阻塞非阻塞与同步异步的区别? - 严肃的回答 - 知乎
https://www.zhihu.com/question/19732473/answer/20851256
https://blog.csdn.net/qq_33314107/article/details/80766381
知乎这个问题下的各个回答,以及这篇blog已经讲的很清楚了。
也有提到同步阻塞,和异步非阻塞是绑定的。
但也有对同步非阻塞,和异步非阻塞的模型的阐释,特此记录解释。
在这套解释中,同步和异步的语义不只是立即返回与否,还是获取结果已完成的方式是通过主动轮询(同步),或是通过被动等待消息通知(异步)。即同步和异步关注的是对“结果”的主动等待与否。
而阻塞和非阻塞的语义相同,即在等待结果时是否可以做其他事,(进程是否需要原地等待,即阻塞在读取结果这个操作不进行其他操作)。
既然异步已经不需要主动等待,所以一般情况下,异步阻塞模型是不存在的。但也被用来描述下列情况:
即异步I/O返回后,通过select监控多个文件描述符是否读取完成。此时理解I/O已经返回了,但阻塞地等待结果。
而同步非阻塞,即I/O立即返回后,通过轮询的方式查看结果是否已经读取完成。