IO多路复用

基本概念:指内核一旦发现进程指定的一个或多个io条件准备读取,他就通知该进程。

IO多路复用适用如下几个场合:1.当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用IO复用。

              2.当一个客户同时处理多个套接口时,(一般这种情况很少出现)

              3.如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用IO复用。

              4.如果一个服务器既要处理TCP又要处理DUP,一般要用IO多路复用。

              5.如果一个服务器既要处理多个服务,又要处理多个协议,要用IO多路复用。

与多进程多线程技术相比,IO多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程线程,从而大大减少这些系统开销。

select函数:该函数准许进程指示内核等待多个事件中的任意一个发送,并只在一个或多个事件发生或经历一段指定时间才被唤醒。

函数参数介绍如下:第一个参数制定待测试的描述字的个数,它的值是待测试最大描述字加1,描述字0、1、2.....均将被测试。(因为文件描述从0开始)

         中间的三个参数readset、writeset、expectset指定我们要让内核测试读、写和异常条件的描述字。如果对某一个条件不感兴趣,就可以把它设置为空指针

          

         timeout告知内核等待所指定描述字中的任何一个就绪可花多少时间,其中timeavel结构用于指定这段时间的秒数和微妙数。

         这个参数有三种可能:1.永远等下去,仅在有一个描述字准备好io时才返回,为此,把该参数设置为空指针NULL。

                   2.等待一段固定时间,在有一个描述字准备好io才返回,但是不超过由该参数所指向的timeavel结构中指定的秒数和微妙数。

                   3.根本不等待,检测描述字后立即返回,这称为轮询,为此,该参数必须指向一个timeavel结构,而且其中的定时器值必须为0。

原文地址:https://www.cnblogs.com/jacky912/p/10281245.html