2024年3月26日发(作者:)
io多路复用的原理和实现
##
一、什么是
IO
多路复用
多路复用是一种程序的处理方式,它可以同时监视多个文件句
柄,当某个文件句柄准备就绪时,就会触发对应的操作,比如向文件
里写入数据或者读取数据。
2.
它可以有效地解决进程间大量数据通信的问题,主要用来处理多线
程和多进程程序中复杂的
I/O
操作,其处理过程如下:
##
二、
IO
多路复用的原理及实现
1.
原理:
IO
多路复用是指同时监听多个文件句柄,一旦某个文件句柄
就绪,就会触发对应的操作,比如写入或者读取文件。
2.实现:多路复用有两大主要实现方法,分别是select函数和poll函
数,它们都有如下四个操作:
-
增加一个新的文件句柄监听;
-
删除某个文件句柄的监听;
-修改某个文件句柄的监听条件;
-查询就绪文件句柄,一旦某个文件句柄准备就绪,就会返回相应的
操作。
##三、select函数
函数是系统调用函数,用于检测文件句柄状态,可以同时监测
多个句柄,函数原型如下:
```
intselect(intnfds,fd_set*readfds,fd_set*writefds,fd_set*exceptfds,struct
timeval*timeout);
```
2.函数参数介绍:
-nfds:指定要监视的句柄个数;
-readfds、writefds、exceptfds:分别指明要检测可读、可写和异常;
-timeout
:指明在多少毫秒之后,如果没有文件句柄就绪,则函数返
回;
-函数返回:函数会返回在指定时间内就绪的文件句柄数目,如果没
有文件句柄就绪,则返回
0
,如果发生错误,则返回
-1
。
##四、poll函数
函数也是一种系统调用函数,它的原型如下:
```
intpoll(structpollfd*fds,nfds_tnfds,inttimeout);
```
2.
函数参数介绍:
-fds
:指向存放文件句柄状态的一个数组;
-nfds
:文件句柄数目;
-timeout:指明在多少毫秒之后,如果没有文件句柄就绪,则函数返
回;
-
函数返回:函数会返回就绪文件句柄的数目,如果没有文件句柄就
绪,则返回0,如果发生错误,则返回-1。
##五、IO多路复用的优缺点
1.优点:
-解决了进程间大量数据通信的问题;
-使程序运行效率更高,运行的更加稳定;
-能够有效地降低对I/O操作的延迟。
2.缺点:
-只能在Unix/Linux系统下使用;
-select
函数和
poll
函数具有许多不足,不能支持超过
1024
个文件句
柄;
-poll函数在64位CPU中运行效率比select函数低。
发布评论