阻塞:等待IO的时候休眠,不进行CPU调度,不占用CPU
非阻塞轮询: 发生IO等待时,处理其它事务,然后固定的时间去检查IO事件是否完成
select: select 是非阻塞轮询的升级版,select可以观察多个流的IO事件,没有IO事件时阻塞掉当前线程,有IO事件时唤醒线程。但是这样效率依然比较低, 因为只返回了有IO事件,并没有返回具体是哪个流发生了IO事件,客户端需要遍历所有的流。时间复杂度是O(n)
epoll: epoll 是一种IO事件通知机制,比如epoll注册了非空和非满这两个事件,缓冲区非空代表有数据流入,非满代表流可以被写入,时间复杂度降低到了O(1)