参考:http://apps.hi.baidu.com/share/detail/21570805#
讲的很不错,第一次看的时候没有深入理解,今天有了自己的理解,记录一下。
同步/异步和阻塞/非阻塞其实是没有直接联系的,虽然表面上看起来有一定相似的效果。
对于同步和异步来说,它是编码的一种的模型,可以运用回调函数callback来实现,它只和你的application有关。而阻塞非阻塞是关乎IO的,所谓非阻塞就是I/O操作可以立即返回。
我参与的项目中很多地方都用到了这一点,基本上都用到了异步,但是有的是阻塞有的是非阻塞。
为什么会有这么多模式(同步阻塞、同步非阻塞、异步阻塞、异步非阻塞),其实并没有说是哪个有绝对的优势,依照不同的情况不同的需求,选择不同的模式。
下面我们具体说说:
假如你不想让你的代码阻塞在某个地方,比如在等待某个用户键盘输入的过程中,你的代码可以先做其它的事情,推荐使用异步模型,可以用callback,这样不会影响别的操作请求,如果阻塞也是在阻塞在callback中。假如有socket操作,并且是阻塞的,那就只好等到select到socket解除阻塞,如果想要做成非阻塞的,可以设置sock.setblocking(0),但是你怎么知道什么时候真正的回应到达了呢,这种情况下你可以做个标记,当你读到回应的时候根据标记找到回调函数。(回调函数真的很有用)如果一个应用程序中有很多I/O操作,最好使用异步模型。
也不知道表达清楚没,就当讲给自己听....