Linux下实现I/O复用的系统调用主要有select、poll、epoll。I/O复用使程序能同时监听多个文件描述符,能大大提高程序的性能。
使用I/O复用技术的主要有以下情况:(I/O复用虽然能同时处理多个文件描述符,但是本身是阻塞的)
- 客户端要同时处理多个socket
- 客户端要同时处理用户输入和网络连接
- TCP服务器要同时处理监听socket和连接socket
- 服务器要同时处理TCP请求和UDP请求
- 服务器要同时监听多个端口,或者处理多种服务
当有多个文件描述符同时就绪时,如果不采用其他措施,程序只能按顺序依次处理其中每一个文件描述符。如果要实现并发,只能使用多线程或多进程等编程手段。
接下来一起来看看select、poll和epoll吧~epoll是Linux特有的系统调用
select系统调用的用途:在一段指定的时间内,监听用户感兴趣的文件描述符上的可读、可写和异常事件
select能监听的事件只有三种:读事件、写事件、异常事件