编程:同步异步/阻塞非阻塞
从通信角度说:
同步:发送方发出数据后,等接收方发挥响应以后才发下一个数据包(TCP)
异步:发送方发出数据后,不等接收方发挥响应,接着发送下个数据包(UDP)
无论是网络传输还是程序执行,只要涉及到通信就分这2种类型,可以看作是消息传递的机制,如果使用HTTP进行下载就是同步,如果使用p2p下载就是异步(或者说大多数都是异步),p2p下载的速度快也有这部分的原因
从线程操作角度说:
阻塞:调用数据,在还没有返回结果之前,线程会被挂起
非阻塞:调用数据,在没有立即得到结果之前,该线程可以继续后续操作
可以看作是消息的处理机制
同步/异步与阻塞/非阻塞之间的区别:
用火狐上安装firebug可以看到打开一个页面,浏览器会去读取的页面信息,第一个是当前访问的页面,但该页面读取完后会去加载该页面所有的图片,样式,脚本
每次读取一个文件,分别会进行连接、发送、等待、接受,这是同步访问,并且也是阻塞的,完整读取好第一个页面后,会同时进行其他多个文件的访问,这些访问是异步的,这些访问都是非阻塞的。但每个访问都是阻塞的,需要进行连接、发送、等待、接受4个连接
2者分别是对不同问题的解释,对于一次访问或者操作,阻塞和非阻塞是强制性的设定,无法变更,但同步和异步是调用时根据具体需求进行选择的