目录
1. 为什么用IO复用
I/O复用使得程序能同时监听多个文件描述符,这对于提高程序的性能至关重要。
2. 什么是IO复用?
Linux平台上提供的IO复用方法有:select,poll,epoll;
其中epol是Linux上特有的10复用方法;select,poll这两个方法在Windows和Unix上都有;
这三个方法都是一个系统调用,它们的实现都在内核中,它不是一个函数;有的书上可能会说IO复用函数,其实这些都是系统调用;
那么这些方法是如何在单个进程单个线程中完成对多个客户端的处理呢?
那么IO复用的过程可以用下图来表示:
我们把IO阻塞在select或poll或epoll这个系统调用上,而不是阻塞在真正的IO系统调用上。
也就是说即便在单个进程中,即使有很多描述符(sockfd,c等)也不会阻塞,谁有数据select会检测到,然后再去处理;也就意味着可以处理很多很多的客户端;
也就是IO复用就是指单个进程/线程可以同时处理多个IO请求 。
总结IO复用的作用:IO复用使得程序能同时监听多个文件描述符
3.什么情况下需要使用I/O复用技术?
通常,网络程序在下列情况下需要使用I/O复用技术
(1)TCP 服务器同时要处理监听套接字和连接套接字。
(2)服务器要同时处理 TCP 请求和 UDP 请求。
(3)程序要同时处理多个套接字。
(4)客户端程序要同时处理用户输入和网络连接。