I/O多路转接之poll函数
如上节所述,poll
函数是另一个支持I/O多路转接的函数。
与select
不同的是poll
函数支持更多的条件,而非select
函数仅有的三种条件(可读、可写以及异常)。
同时poll
函数是以struct pollfd
数组类型保存文件描述符(没有文件描述符的数量限制),并为每个文件描述符指定关注的哪些条件,而select
函数则是另一种角度,为每个条件设置哪些文件描述符。
专注于工业物联网行业数据采集,嵌入式Linux系统裁剪,5G智慧网关软件开发等
如上节所述,poll
函数是另一个支持I/O多路转接的函数。
与select
不同的是poll
函数支持更多的条件,而非select
函数仅有的三种条件(可读、可写以及异常)。
同时poll
函数是以struct pollfd
数组类型保存文件描述符(没有文件描述符的数量限制),并为每个文件描述符指定关注的哪些条件,而select
函数则是另一种角度,为每个条件设置哪些文件描述符。
当一个进程需要从多个文件描述中读,并写入多个文件描述符中(例如TCP服务器)。
当一个进程需要对一个文件描述符同时进行读写,两者并没有前后关系。如果采用阻塞I/O,那么没有数据读就会阻塞,进而导致进程无法处理写入,写阻塞时同理。
上述问题的一个解决方法是采用多线程,每个线程中对一个描述符进行阻塞I/O,缺点是线程实现复杂,同时进程支持的线程数量有限。