阻塞和非阻塞网络io有什么区别
1个回答
展开全部
阻塞IO和非阻塞IO,主要区别在于第一个阶段。也即是阻塞IO,在套接字缓冲区没准备好的情况下,会一直等待。而非阻塞IO,在套接字缓冲区没准备好时,会立即返回。
获取IO数据,分为两个阶段,一是套接字缓冲区准备阶段;二是数据拷贝阶段(内核将数据从socket缓冲区拷贝到用户空间)。套接字的默认状态是阻塞的,但是有两种方式改变阻塞标志。一种是直接设置套接字为非阻塞,另一种是在方法中设置阻塞标记。
总结
在非阻塞IO下,用户程序通过轮询方式不断的查询,引起CPU占用率高(内核态和用户态的切换)。
所以一般将非阻塞IO和IO多路复用技术select、poll等搭配使用(其实select、poll也是不断的轮询多个socket,不过是在内核态)。
这种方式,极大的提高了程序的健壮性和稳定性,是Linux下高性能网络编程的首选。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询