进程多路复用

多路复用:
    使用一个进程(有且只有一个主进程)同时监控若干个文件描述符,这种读写模式称为多路复用
    多用于TCP的服务端,用于监控客户端的连接和数据的收发
    优点:不需要频繁地创建、销毁进程,从而节约内存资源、时间资源,也避免了进程之间的竞争、等待
    缺点:要求单个客户端的任务不能太耗时,否则其它在等待的客户端就会感知"卡顿"
    适用场景:适合并发量大、但任务短小的场景,例如Web服务器

实现多路复用相关函数:

    select设计不合理的地方:
    1、每次调用select都需要向它传递要监控的描述符的集合
    2、当调用结束后如果想要知道哪些描述符发生了操作,需要拿着所有被监控的描述符对着集合进行逐一测试

    select的优点:
        是最早出现的多路复用函数,几乎所有的操作系统都支持,系统的兼容性高

pselect:
    只是select功能的部分增强,没有本质区别、缺点一致
    功能、原理与select大致类似
    区别:
    1、超时时间结构类型不同、pselect的精度更高
    2、pselect的超时时间参数不会改变,因此无法获取剩余时间,但是select的会改变,可以获取剩余时间,但是每次都需要重新设置
    3、pselect监控时可以通过sigmask参数设置想要屏蔽的信号,可以保障pselect在监控过程中不会被信号中断
   4、 epoll与select比较的优点:
        1、只需要设置一次要监控的描述符即可
        2、epoll会把发生了事件的描述符返回到结构数组,只需要遍历该数组就可以处理所有发生了事件的描述符,但是select返回到集合中,需要遍历全部被监控的描述符才能处理
    
    epoll的条件触发和边缘触发:
        条件触发:当文件缓冲区中有要读取的数据时就会触发事件,也是epoll的默认触发

        边缘触发:当数据产生了发送的动作时就会触发且只触发一次,就算文件缓冲区中要有需要读取的数据也不再触发事件
            1、把要监控描述符的事件增加 EPOLLET 边缘触发选项
            2、要循环读取数据直到读取完为止 while(-1 != recv)
            3、recv读取时必须以非阻塞方式读取MSG_DONTWAIT,否则就一直阻塞,形成死锁
            4、当recv返回-1表示数据读取完毕,0表示断开

        优点:相比于条件触发,边缘触发能够大大降低触发次数,从而提高epoll的效率
        


    


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值