I/O复用使得程序能同时监听多个文件描述符,这对提高程序的性能至关重要。通常,网络程序在下列情况下需要使用I/O复用复用技术:
- 客户端程序要同时处理多个socket
- 客户端程序要同时处理用户输入和网络连接。
- TCP服务器要同时处理监听socket和连接socket。这是I/O复用使用最多的场景。
- 服务器要同时处理TCP请求和UDP请求。
- 服务器要同时监听多个端口,或者处理多种服务。
需要指出的是,I/O复用虽然能同时监听多个文件描述符,但它本身是阻塞的。并且当多个文件描述符同时就绪时,如果不采取额外的操作,程序就只能按顺序依次处理其中的每一个文件描述符,这使得服务器程序看起来像是串行工作的一样。如果要实现并发,只能使用多进程或者多线程编程等手段。