IO多路复用是建立在内核提供的多路分析函数select基础之上,使用select函数可以避免同步非阻塞IO模型轮询等待的问题;
用户首先将需要进行IO操作的socket添加到select中,然后阻塞等待select系统调用返回;
当有多个客户连接,此时select函数监听多个socket对象,socket1,socket2,socket3等;
当其中有一个发送消息回来,当前线程就会从select的阻塞状态中返回,然后就调用read读取收到消息的socket对象,之后又会回到select中阻塞,等待下一个消息;这样就不会因为等待一个socket对象而阻塞在这里,造成不能处理其他socket通信;
参考文档:
IO多路复用机制-详解