耳目一新|林林总总 涂鸦·电影·分享·碎碎念

阻塞VS非阻塞模式(转)

2012-07-19

1)请问用什么模式开发比较好?
如果每次通信数据量不大,服务器不需要什么计算,用非阻塞方式较适合。

2)阻塞和非阻塞模式有什么区别?
阻塞方式下如果一个客户的请求没有响应完服务器会等待直到对这个客户请求处理完了后,才会处理其他客户的请求。
非阻塞方式下工作于异步状态——数据通信函数如send调用后立即返回,使程序可以处理其他消息,效率比较高。

3)是否要用到多线程?
阻塞方式要用多线程才能同时响应多个客户的请求。

以套接字为例,在阻塞模式下,利用TCP协议发送一个报文时,如果低层协议没有可用空间来存放用户数据,则应用进程将阻塞等待直到协议有可用的空间。而在非阻塞模式下,调用将直接返回而不需等待。在应用进程调用接收函数接收报文时,如果是在阻塞模式下,若没有到达的数据,则调用将一直阻塞直到有数据到达或出错;而在非阻塞模式下,将直接返回而不需等待。
对于UDP协议而言,由于UDP没有发送缓存,因此所有UDP协议即使在阻塞模式下也不会发生阻塞。
对于面向连接的协议,在连接建立阶段,阻塞与非阻塞也表现不一。在阻塞模式下,如果没有连接请求到达,则等待连接调用将阻塞直到有连接请求到达;但在非阻塞模式下,如果没有连接请求到达,等待连接调用将直接返回。

如非特殊标明都是原创文章,版权所有congwong
转载请注明: 转载自播种幸福吧
本文链接地址: 阻塞VS非阻塞模式(转)

上一篇:
下一篇:
作者:congwong | Categories:技术 | Tags: