Posted by:
努力记

努力记,通过记录,计划,让自己的努力可以触碰彩虹!

4,905

编程:同步异步/阻塞非阻塞

  • 2013-04-27
  • 暂无评论

以下从一些效果中分析同步/异步和阻塞/非阻塞的概念

从通信角度说:

同步:发送方发出数据后,等接收方发挥响应以后才发下一个数据包(TCP)

异步:发送方发出数据后,不等接收方发挥响应,接着发送下个数据包(UDP)

无论是网络传输还是程序执行,只要涉及到通信就分这2种类型,可以看作是消息传递的机制,如果使用HTTP进行下载就是同步,如果使用p2p下载就是异步(或者说大多数都是异步),p2p下载的速度快也有这部分的原因

从线程操作角度说:

阻塞:调用数据,在还没有返回结果之前,线程会被挂起

非阻塞:调用数据,在没有立即得到结果之前,该线程可以继续后续操作

可以看作是消息的处理机制

同步/异步与阻塞/非阻塞之间的区别:

用火狐上安装firebug可以看到打开一个页面,浏览器会去读取的页面信息,第一个是当前访问的页面,但该页面读取完后会去加载该页面所有的图片,样式,脚本

每次读取一个文件,分别会进行连接、发送、等待、接受,这是同步访问,并且也是阻塞的,完整读取好第一个页面后,会同时进行其他多个文件的访问,这些访问是异步的,这些访问都是非阻塞的。但每个访问都是阻塞的,需要进行连接、发送、等待、接受4个连接

2者分别是对不同问题的解释,对于一次访问或者操作,阻塞和非阻塞是强制性的设定,无法变更,但同步和异步是调用时根据具体需求进行选择的



back up ↑

无觅相关文章插件,快速提升流量