计算机IO模型六、多路复用器及Epoll

1. NIO概念介绍:

     NIO(Non-Blocking I/O,java中,也称为New I/O),是一种同步非阻塞的I/O模型,也就是I/O多路复用的基础,已经被越来越多的应用到大型应用服务器中,是解决高并发,I/O处理问题的有效方式。NIO可以通过一个或者几个线程去解决N个IO连接的问题。

     非Epoll模型存在的弊端:每循环一次,都会有O(N)的时间复杂度,比如有一万个连接,每循环一次,都存在系统调用去调用accept或者recv方法,很多调用时无意义的,浪费资源的。因为系统调用就会存在软中断,内核态和用户态保护线程,用户线程切换,进程调度等操作,成本非常高。

2. 多路复用器:

  多条路(IO)通过一个系统调用,获得IO状态。通过多路复用器只能获取状态,然后由程序自己根据状态去对IO进行读写等操作。

3. 同步非阻塞:

   目前LINUX系统下的多路复用器遵循POSIX规范,主要有SELECT,POLL,EPOLL,KQUEUE。这些都属于同步非阻塞,也就是程序拿到状态后,还要自己去读写。

 

4. SELECT,POLL模型简介(后续文章中会详细介绍几种多路复用模型)

SELECT:synchronous I/O multiplexing. 有个参数FD_SETSIZE(1024)限制监控1024个文件描述符。POLL里面没有1024的限制。其实无论NIO,SELECT,POLL都是要遍历所有的IO,询问状态,只不过NIO中遍历的过程都会存在用户态和内核态的切换,成本比较大。在SELECT,POLL遍历的过程出发了一次系统调用,调用过程中把FDS传给内核,内核重新根据用户这次调用传过来的FDS遍历并修改状态。

SELECT,POLL弊端: 每次都要重复传递FDS,内核需要开辟空间,每次内核针对这次调用触发一个遍历FDS全量的复杂度。

我们知道,用户态想要调用kernel中的方法,其实是CPU读取到用户态的一个指令,int0x80软中断,从而调用内核中的方法。CPU有对应的指令集,指令集有其对应的中断向量表,中断向量表有对应的回

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值