全站数据
8 4 2 0 5 8 1

为什么IO多路复用要搭配非阻塞IO

财经文博 | 简单学习,快乐成才!         
问题更新日期:2024-10-22 02:10:26

问题描述

为什么IO多路复用要搭配非阻塞IO,在线求解答
精选答案
最佳答案

数据达到socket缓冲区时,可能会因为一些原因被内核丢弃,比如,校验和错误,这时IO复用唤醒线程对socket读并不能读到数据,如果是阻塞IO就会被阻塞住。

这个达到缓冲区的数据不一定被丢弃,但是也有可能被别人取走了,比如多个进程accept同一个套接字时引发的惊群现象,只有一个连接到来,但是所有的监听进程都被唤醒了,但是最终只有一个进程可以accept到这个请求,其他进程在阻塞IO进程下都会被阻塞。

epoll的ET模式必须要使用非阻塞IO,因为需要多次循环读写直到EAGAN出现,如果使用阻塞IO容易被阻塞住。