阻塞和非阻塞网络io有什么区别

 我来答
爱电子数码的发烧友
2022-10-12 · TA获得超过1296个赞
知道小有建树答主
回答量:3662
采纳率:100%
帮助的人:53.6万
展开全部

阻塞IO和非阻塞IO,主要区别在于第一个阶段。也即是阻塞IO,在套接字缓冲区没准备好的情况下,会一直等待。而非阻塞IO,在套接字缓冲区没准备好时,会立即返回。

获取IO数据,分为两个阶段,一是套接字缓冲区准备阶段;二是数据拷贝阶段(内核将数据从socket缓冲区拷贝到用户空间)。套接字的默认状态是阻塞的,但是有两种方式改变阻塞标志。一种是直接设置套接字为非阻塞,另一种是在方法中设置阻塞标记。

总结

在非阻塞IO下,用户程序通过轮询方式不断的查询,引起CPU占用率高(内核态和用户态的切换)。

所以一般将非阻塞IO和IO多路复用技术select、poll等搭配使用(其实select、poll也是不断的轮询多个socket,不过是在内核态)。

这种方式,极大的提高了程序的健壮性和稳定性,是Linux下高性能网络编程的首选。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式