I/O多路复用技术

I/O多路复用技术

在I/O编程过程中,当需要同时处理多个客户端接入请求时,可以利用多线程或者I/O多路复用技术进行处理。I/O多路复用技术通过把多个I/O的阻塞复用到同一个select的阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端请求。与传统的多线程模型比,I/O多路复用技术的最大优势是系统开销小,系统不需要创建额外进程或者线程,也不需要维护这些进程或线程的运行。

支持的I/O多路复用技术

  1. select

  2. pseelct

  3. poll

  4. epoll

在Linux网络编程很长的一段时间内都是使用select做轮询和网络事件通知,然而select的一些固有缺陷导致它的应用受到很大限制,最终liux使用了epoll替代select,主要有以下方面的改进

  1. 支持一个进程打开的socket描述符(FD)不受限制(仅受限于操作系统的最大文件句柄数)

  2. I/O效率不会随着FD数目的增加而线性下降

    传统select/poll有个致命的弱点就是当有一个很大的socket集合时,由于网络延时或者链路空闲,任意时刻只有很少部分的socket是活跃的,但select/poll每次调用都会线性扫描全部集合,导致效率呈现线性下降。而epoll不存在这个问题,它只对活跃的socket进行操作,这是因为在内核中实现的epoll是根据每个fd上面的callback函数实现的,那么只有活跃的socket才会主动调用callback函数,其他idle状态的socket则忽略,在这点上,epoll实现了一个伪AIO。

  3. 使用mmap加速内核与用户空间的消息传递

    无论是select还是epoll,都需要内核把fd消息通知给用户空间,那么如何避免不必要的内存复制就显得非常重要,epoll是通过内核和用户空间mmap同一块内存实现。

  4. epoll的API更加简单

从BIO到NIO是java通信类库的一小步,但却对java在高性能通信领域的发展起到关键性推动作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ljt-tiger

thanks

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值