Linux 之 IO 多路复用

Linux 之 IO 多路复用

I/O 多路复用
  • I/O 多路复用 就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。
  • 单线程或单进程 同时监测若干个文件 描述符是否可以执行 I/O 操作的能力。
  • Linux 下包括了三种: selectpollepoll
select => 时间复杂度 O(n)
  • 它仅仅知道,有 I/O 事件发生,却并不知道是哪几个流。
  • 我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。
  • 所以 select 具有 O(n) 的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。
poll => 时间复杂度 O(n)
  • poll 本质上和 select 没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个 fd 对应的设备状态。
  • 但是它没有最大连接数的限制,原因是它是基于链表来存储的。
epoll => 时间复杂度 O(1)
  • epoll 可以理解为 event poll,不同于盲轮询和无差别轮询,epoll 会把哪个流发生了怎样的 I/O 事件通知我们。
  • 所以我们说 epoll 实际上是事件驱动(每个事件关联上 fd),此时我们对这些流的操作都是有意义的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值