3分钟彻底理解IO多路复用

作者: 码农的荒岛求生分类: 计算机技术 发布时间: 2024-03-20 08:00:00 浏览:35166 次

3分钟彻底理解IO多路复用

相似性similarity:
epoll_ctl,将要监听的fd加到红黑树中,并使用回调函数监听,发生事件,内核去准备好数据,数据就绪,就将这些fd添加到链表,然后复制到用户空间,用户态就知道哪些fd准备好了,再把对应的数据取出来进行响应

Su9arLan:
能不能这么理解,本来是自己守着监听单个,阻塞,现在集体丢给操作系统监听,自己只处理发生的事件

zhshi:
说实话我感觉程序员起看起来高大上名字的能力和金融从业者有一拼。

【回复】能造出新概念的往往是能挣钱的领域[呲牙]
【回复】这个概念应该来自于信号里面的多路复用
【回复】什么程序员?叫工程师![doge]
april2summer:
返回的一堆可用的列表后,之后还是一个个顺序执行吗

【回复】如果是单进/线程下就是一个一个处理的,比如处理1个要1秒,第10个就就是等了9秒
【回复】看需求,可以在单线程中串行处理,也可以丢给线程池处理
Evil_999:
阻不阻塞在于你调用的读写方法和文件描述符的属性,跟是否多路复用没有关系。视频里的案例调用read依旧会阻塞。错误的内容误导性太强了[辣眼睛]

【回复】回复 @森屿暖树vii : 阻不阻塞跟多路复用根本就是两个概念
【回复】正确的做法是 事件驱动+非阻塞IO。举个服务器编程的实例:epoll+recv,稳妥起见还需要在添加事件时调用系统接口fcntl 设置fd非阻塞。
【回复】回复 @Evil_999 :我知道你说的是读写调用,而不是指的所谓select poll epoll那些东西[tv_鬼脸]
天赐细莲:
非常精简:将一堆fd丢给内核处理,当有fd有io操作触发时,将其列表返回给应用程序。

蛋x:
io多路复用在内核的本质都是cpu中断,原理都是网卡或硬盘准备好数据后,产生了中断信号,再根据不同的需求向上层触发中断信号。 比较古老的模型,中断索引到单个文件描述符,所以select和poll还需要程序员自己轮询一遍。 而较新的模型,epoll和windows的iocp这些,在触发中断后,在索引到对应的epfd和iocp handle之后,还会通过红黑树索引到对应的文件描述符。

AI视频小助理:
本视频讲述了IO多路复用的概念和实现方法。通过将多个文件描述符交给内核处理,实现高效的IO处理机制。这种机制在网络编程中尤为重要,可以避免单个文件描述符的阻塞操作,提高服务器的处理能力。--以上内容由模型基于视频内容生成,仅供参考

无聊的蛋黄:
这个怎么更像异步啊,多路复用就是这个意思吗?一直不太懂

【回复】这个应该不算异步,所谓io多路复用就是一次能处理多个文件
摆动滴呆毛:
我想问一下,如果不用系统内核监控,可不可以自己实现这个监控

【回复】我没读过源码,但是我敢肯定内核监控io事件的产生肯定使用了cpu的中断。而用户态对使用中断的能力是被限制的。所以我感觉自己写程序实现应该做不到和内核一样。其他人提到的非阻塞轮询方法只能做到看起来结果一样,但是背后的机制完全不一样,效率也没法比。
【回复】回复 @emerson- :不了解这两个东西,我去看看。
【回复】回复 @zhshi :不一定,dpdk,spdk都是绕过内核应用层直接对接硬件,而且更加高效
给我来呗乌龙茶:
我有一个问题,io多路复用只是减少单线程执行多文件操作的时间,和多线程没有关系吗?

【回复】io多路复用可以一定程度上解决非阻塞io的频繁的系统调用,看起来像把轮询操作交给了操作系统内核去做,有任意就绪的描述符就会返回,和多线程没有关系吧,不知道我说的对不对
【回复】io多路复用和多线程没有关系
【回复】通常在IO多路复用场景中需要配合多线程一起使用,当一个文件面试符就绪是需要创建线程去处理这个就绪事件
Xian同学0213:
是不是可以用线程呢?多个客户端连接的时候,空间有限,如果每有一个客户端连接就创建一个线程的话,空间迟早被用完,所以用IO多路复用能解决这个问题是吗。

终南-山人:
IO多路是在一个背景下出来的,就是 单线程管理多个连接时,然后会循环遍历每个连接查看是否有数据到达,但这样每个连接都要一次系统调用,开销大。 所以就提出IO多路复用:查看多个连接是否有数据到达,复用一次系统调用,就能得到有数据可用的连接。 大佬,这是我三年前的理解了,大脑知识库一直没更新。这个理解对不对啊[笑哭]

绿豆的爸爸:
一切皆文件,变量可以被当成文件来监控吗?比方我有一组变量,任意一个变量被其他进程改写了,我希望有内核来通知我。

【回复】回复 @一手看戏 :没有,我是自己有个自己的私有项目
【回复】回复 @绿豆的爸爸 :不了解,我准备面试八股的,
【回复】回复 @一手看戏 :细说下,啥意思?
云间锦书寄_:
感觉这个是加分项,在redis那一块自己还研究了下。感觉每次和面试官都可以在这个点上面聊好久,这样子就没其他时间拷打我了,要深度有深度。可是他就是不问[疑惑]

程序员 计算机 #程序 代码 io 编程开发 高并发 #编程 多路复用 IO多路复用

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!