首先,还是非常感谢老师的热心解答。那篇csdn上面的博客引用到了《unix网络编程》这本书上的定义
Stevens给出的定义(其实是POSIX的定义)是这样子的:
A synchronous I/O operation causes the requesting process to be blocked until that I/O operationcompletes;
An asynchronous I/O operation does not cause the requesting process to be blocked;
我看了好几遍这篇文章,文章中的阻塞(blocked) 应该针对地是 用户进程process。而老师的解答是针对的操作系统,而且博客中,
" blocking IO,non-blocking IO,IO multiplexing都属于synchronous IO "
概念上就存在比较大的区别了。我并非站在博客的角度上来反对老师的解析,纯粹是进行交流学习才提出自己的疑惑的。也许这种问题太过学术理论化,咱不纠结也不影响干活。不管怎样,感谢老师的解答。
在 2017年1月20日星期五 UTC+8上午10:11:23,WenMing写道:
我来尝试解释下。先明确下概念,对于说同步和异步,
其实我们指的是『同步操作』和『异步操作』;对于阻塞和非阻塞,其实指的是『阻塞操作系统线程』和『不阻塞操作系统线程』。 对应到 OpenResty 里面,
ngx.timer.at 就是一个异步操作,非阻塞,这种就是 nonblocking I/O;而 cosocket,就是同步操作,也是非阻塞,它也是 nonblocking I/O。
所以说 OpenResty 是异步非阻塞的,并不正确。OpenResty 的所有操作都是 nonblocking I/O,不会造成任何的阻塞。
在 2017年1月19日 下午9:43,
<maxwa...@gmail.com>写道:
openresty一直强调地是异步非阻塞的应用。的确很吸引人,所以最近在查资料到底什么叫异步非阻塞?也许对于工程师而言,这种理论上面的问题大家都不是喜欢那么深究,毕竟大家强调地是会用就行,管它呢?但我想哪天要是面试被问到那就完了,而且这也是反映一个工程师基本功的问题?
所以,另外想请教下春哥,和其它大神对这几个概念的看法?谢谢。
--