IO 多路复用? 什么是 IO 多路复用? 简单示例(日常生活)来解释 IO 多路复用 一看就懂! 大白话,可爱式(傻瓜式)教学! 保你懂!

简介: 本文通过日常生活中的简单示例解释了IO多路复用的概念,即一个线程通过监控多个socket来处理多个客户端请求,提高了效率,同时介绍了Linux系统中的select、poll和epoll三种IO多路复用的API。

一、IO多路复用可以简单用一句话诠释:

一个线程来处理多个 socket

更进一步地对上面那句话诠释:一个线程来调动服务器来轮流处理多个客户端发来的请求

针对 TCP 来说,服务器这边每次要服务一个客户端,都需要给这个客户端安排一个 socket

一个服务器服务多个客户端,同时就有很多个 socket

同一时刻,只有少数 socket 是活跃的(大部分情况)

    这些 socket 上都是无时无刻的在传输数据么?

    很多情况下,每个客户端和服务器之间的通信也没那么频繁

    此时这么多 socket 大部分时间都是 静默 的,上面是没有数据需要传输的

二、IO 多路复用的 API 及常用语言的 IO 多路复用的方式

IO 多路复用 => 一个线程来处理多个 socket

操作系统,给程序员提供的机制,提供了一套 API,内部的功能都是操作系统内核实现的

Linux 上提供的 IO 多路复用,主要是三套 API

  • select
  • poll
  • epoll

epoll 是运行效率最高的机制

C++ 可以直接使用 Linux 原生的 epoll api

java 可以使用 NIO(标准库提供的一组类,底层就是封装了 epoll)

三、简单示例(日常生活)来解释 IO 多路复用 一看就懂!

问题:

我楼下有个小摊,我们小区也有这样的小摊,然后今天晚上,我和妻子都不想做饭,于是我们商量着要在楼下小摊买点饭带回家吃

我想吃蛋炒饭

我妻子想吃肉夹馍

我女儿想吃饺子

都有什么实现方案呢?

第一种:

我自己去,先买蛋炒饭,等拿到了蛋炒饭后,再去买肉夹馍,再等肉夹馍好了后,去买饺子,等饺子好了,就全部搞定了!

效率最低的方案!!!

第二种:

我们三个人一起去,我去买蛋炒饭,妻子去买肉夹馍,女儿去买饺子,各等各的,然后都拿到后就全部搞定了

效率大大提升了,但是系统开销大了

第三种:

先去买蛋炒饭,等的过程中去买肉夹馍,还在等的过程中,去买饺子

这三份饭,哪个先做好了,对应的老板就可以喊我一嗓子,然后我都拿到后就全部搞定了!

此时就能让我一个线程同时做三件事

能高效地完成这三件事的前提是,这三件事的交互都不频繁,大部分时间都在等!!!

“对应的老板就可以喊我一嗓子” 这就叫 epoll 事件通知/回调机制

我的操作以及对应的场景就是 IO 复用!

四、IO 复用不适合的场景:

如果多个事件都是交互特别频繁的,还是老老实实多搞几个线程靠谱,一个线程就容易忙不过来

目录
相关文章
|
5月前
|
网络协议 安全 测试技术
手撕测试tcp服务器效率工具——以epoll和io_uring对比为例
手撕测试tcp服务器效率工具——以epoll和io_uring对比为例
112 2
|
监控 程序员 Linux
你管这破玩意叫 IO 多路复用?
为了讲多路复用,当然还是要跟风,采用鞭尸的思路,先讲讲传统的网络 IO 的弊端,用拉踩的方式捧起多路复用 IO 的优势。 为了方便理解,以下所有代码都是伪代码,知道其表达的意思即可。
663 0
你管这破玩意叫 IO 多路复用?
|
13天前
|
消息中间件 NoSQL Java
面试官:谈谈你对IO多路复用的理解?
面试官:谈谈你对IO多路复用的理解?
29 0
面试官:谈谈你对IO多路复用的理解?
|
5月前
|
算法 大数据 数据处理
【软件设计师备考 专题 】IO控制方式(中断系统、DMA、IO处理机方式)
【软件设计师备考 专题 】IO控制方式(中断系统、DMA、IO处理机方式)
146 1
|
11月前
|
存储 网络协议 安全
探索Java通信面试的奥秘:揭秘IO模型、选择器和网络协议,了解面试中的必备知识点!
通过深入探索Java通信面试的奥秘,我们将揭秘Java中的三种I/O模型(BIO、NIO和AIO)、选择器(select、poll和epoll)以及网络协议(如HTTP和HTTPS),帮助您了解在面试中必备的知识点。这些知识点对于网络编程和系统安全方面的求职者来说至关重要,掌握它们将为您的职业发展打下坚实的基础!
|
5月前
百度搜索:蓝易云【Socket网络通信过程 与 IO多路复用原理。】
以上是Socket网络通信过程和IO多路复用原理的简要说明。它们是网络编程和IO处理中重要的概念和技术,对于构建高性能的网络应用程序非常有价值。
48 0
|
11月前
|
缓存 Unix Linux
linux系统编程 标准io
linux系统编程 标准io
93 0
|
存储 编译器 Linux
Linux系统编程2(基础IO详解)
Linux系统编程2(基础IO详解)
116 0
|
存储 网络协议 NoSQL
这么回答offer拿到手软,谈谈你对IO多路复用机制的理解
一位工作5年的小伙伴面试时被问到IO相关的问题,说,谈谈你对IO多路复用机制的理解。当时他说只是听过多路复用,具体细节没有了解过。今天,我给大家分享一下我的理解。
69 0
|
缓存 Linux
学习系统编程No.12【基础IO】
学习系统编程No.12【基础IO】