生如夏花的博客

专注于工业物联网行业数据采集,嵌入式Linux系统裁剪,5G智慧网关软件开发等

I/O(2)

IO多路转接之select函数

当一个进程需要从多个文件描述中读,并写入多个文件描述符中(例如TCP服务器)。

  1. 如果采用阻塞I/O,那么前面的描述符中没有数据时就会阻塞,这样即使后面的描述符有数据也无法读取,写描述符同理。
  2. 如果采用非阻I/O,那么就需要不断轮询所有描述符(浪费CPU时间)。

当一个进程需要对一个文件描述符同时进行读写,两者并没有前后关系。如果采用阻塞I/O,那么没有数据读就会阻塞,进而导致进程无法处理写入,写阻塞时同理。

上述问题的一个解决方法是采用多线程,每个线程中对一个描述符进行阻塞I/O,缺点是线程实现复杂,同时进程支持的线程数量有限。