- 当数据达到socket缓冲区时,可能会因为一些原因被内核丢弃,比如,校验和错误,这时IO复用唤醒线程对socket读并不能读到数据,如果是阻塞IO就会被阻塞住。
- 这个达到缓冲区的数据不一定被丢弃,但是也有可能被别人取走了,比如多个进程accept同一个套接字时引发的惊群现象,只有一个连接到来,但是所有的监听进程都被唤醒了,但是最终只有一个进程可以accept到这个请求,其他进程在阻塞IO进程下都会被阻塞。
- epoll的ET模式必须要使用非阻塞IO,因为需要多次循环读写直到EAGAN出现,如果使用阻塞IO容易被阻塞住。
为什么IO复用还需要搭配非阻塞IO
最新推荐文章于 2022-11-10 23:36:04 发布