面试题目I/O

1️⃣ 【面试指南】请解释下什么是 I/O 多路复用?

有必要先弄清这个概念,这里的 I/O 通常指网络 I/O,多路指多个 Socket 链接,复用指操作系统进行运算调度的最小单位线程。整体意思也就是多个网络 I/O 复用一个或少量的线程来处理 Socket。
关于 I/O 多路复用的多种实现,继续参考下文。

I/O 多路复用的四种实现I/O 多路服用有多种实现模式:select、 poll、 epoll、 kqueue

  • select
    通过轮询检查在文件描述符上设置的标识位来进行判断,select 的轮询相当于在数据库中查找一条记录没有建立索引,对所有的 socket 进行全部遍历,这对 CPU 是浪费的。另外 select 还有一个限制,对于单个进程所能打开的文件描述符最大只能是 1024,那么基于 select 的轮询技术最多也只能很好的处理 1000 并发的吞吐量,无法解决C10K问题

  • poll
    pollselect 在实现上没有本质的区别,相比较 select,poll 基于链表来实现,没有了最大链接 1024 的限制。但是当文件描述符多了之后,每次调用都会对链接进行线性遍历,性能还是十分低下的。

  • epoll

    • epoll是 linux 下效率最高的 I/O 事件通知机制,没有最大链接限制,通过 callbak 回调通知机制,不在是每次调用都对链接进行线性遍历,这样就不会随着文件描述符的增加导致效率下降。
    • epoll的处理⽅式是创建⼀个待处理的事件列表,然后把这个列表发给内核,返回的时候在去轮训检查这个表,以判断事件是否发⽣,epoll⽀持⼀个进程打开的最⼤事件描述符的上限是系统可以打开的⽂件的最⼤数,同时epoll库的IO效率不随描述符数⽬增加⽽线性下降,因为它只会对内核上报的“活跃”的描述符进⾏操作。
    • 在 1GB 内存的机器上能监听大约 10 万个端口,远超过 select 的 1024 限制,具体可以在服务器上查看 cat/proc/sys/fs/file-max
    • 内存拷⻉,利⽤mmap(Memory Mapping)加速与内核空间的消息传递;即epoll使⽤mmap减少复制开销
      在这里插入图片描述
  • kqueue
    与 epoll 类似,仅存于 FreeBSD(一种类UNIX操作系统)。

2️⃣ 【面试指南】如果问到轮询技术的实现一般也会考察 select 和 epoll 的区别?

🅿 1.在操作方式上区别

  • select 采用了线性遍历来查找,链接多了之后可以想象一下在一个诺大的数组中每次通过遍历来锁定一个链接,是多么的消耗性能。
  • epoll 则不需要遍历,采用的是回调机制,可以看作一个 HashTable,来锁定一个对象是很快的。

🅿 2.文件描述符限制

  • 对于文件描述符(最大连接数)select 限制为 1024。
  • epoll 则没有这个限制,通常在 1G 内存的机器上所能支持的连接数为 10W 左右。

🅿 3.对于操作系统的支持

从操作系统支持上来看,目前流行的高性能 Web 服务器 Nginx 是基于 epoll 来实现高并发,当然如果你的链接很小的情况下区别还是不大的 select 也能满足,如果是大流量、高并发情况 epoll 目前还是首选模型。
如果是大流量、高并发情况 epoll 目前还是首选模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值