首页 > 技术文章 > socket的阻塞与非阻塞,同步与非同步

sunshine1218 2017-04-26 17:30 原文

网络编程中通常提到四种方式,同步/异步,阻塞/非阻塞。以下对它们的概念进行总结

1、同步/异步:主要针对C端

同步:所谓同步,就是在C端发出一个功能调用时,在没有得到结果之前,调用不返回,也就是必须一件一件事做,等前一件做完了才能做下一件事。

例如普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回,这个期间客户端浏览器不能干任何事。

异步:当C端一个异步调用发出后,调用者不能立即得到结果,实际处理这个调用的部件在完成后,通过状态,通知和回调来通知调用者。

例如 ajax请求(异步):请求通过事件触发->服务器处理(这时浏览器仍然可以做其他事情)->处理完毕

2、阻塞/非阻塞 主要针对S端

阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,CPU 不会给线程分配时间片,及线程暂停运行)。函数只有在得到结果之后才会返回。

非阻塞:与阻塞概念相对应,指在不能立即得到结果之前,该函数不会阻塞当前线程,而会立刻返回。

 注意:

socket 默认使用的是非阻塞式异步传输通讯方式,对应的MFC的CSocket利用的是面向连接的TCP协议。

推荐阅读