更新时间:2023-05-30 来源:黑马程序员 浏览量:
是利用单个线程来同时监听多个Socket,并在某个Socket可读、可写时得到通知,从而避免无效的等待,充分利用CPU资源。
阶段一:
①用户进程调用select,指定要监听的Socket集合
②内核监听对应的多个socket
③任意一个或多个socket数据就绪则返回readable
④此过程中用户进程阻塞
阶段二:
⑤用户进程找到就绪的socket
⑥依次调用recvfrom读取数据
⑦内核将数据拷贝到用户空间
⑧用户进程处理数据
IO多路复用是利用单个线程来同时监听多个Socket,并在某个Socket可读、可写时得到通知,从而避免无效的等待,充分利用CPU资源。不过监听Socket的方式、通知的方式又有多种实现,常见的有select、poll、epoll。
差异:select和poll只会通知用户进程有Socket就绪,但不确定具体是哪个Socket,需要用户进程逐个遍历Socket来确认。epoll则会在通知用户进程Socket就绪的同时,把已就绪的Socket写入用户空间。