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函数低。