|面试官问我Linux的网络IO模式怎么办?
并发 , 顾名思义就是多个程序一起运行 。 运行在哪里呢?当然是cpu
所以并发就是多个程序一起运行在cpu上咯?
no no no!就单个cpu而言 , 一次只能处理一个程序 , 之所以能够看起来「一起运行」 , 是因为操作系统采用了分时系统 , 什么时间片 , 调度算法啦 , 让程序交替式的在cpu上运行 , 看起来好像是一起运行一样(这里不展开了 , 后面再更新给大家)
所以这就是并发的全部意义吗?就是多个程序通过操作系统的调度交替运行 , 看起来像一起运行 , 所以称为并发?
当然不是 , 之所以称为并发编程 , 是因为它们有真正同时运行的地方 。
回顾一下操作系统的基础知识 。 我们知道 , 操作系统是采用虚拟存储的 , 它的核心是内核 , 为了保护内核的安全 , 操作系统把虚拟空间划分成两部分 , 一部分是内核空间 , 一部分是用户空间 , 就像星空战舰上的指挥室一样 。
本文插图
这时候聪明的的你肯定就会发现一个问题
cpu运算的结果是放在内核空间的 , 而我们读取结果却是在用户空间 , 这就有一个数据从内核空间到用户空间的过程
没错 , 从操作系统层看程序运行时的数据流的话 , 是有「等待数据 --- 数据拷贝到内核空间 --- cpu运算 --- 数据从内核空间拷贝到用户空间」 这几个过程的
本文插图
程序运行时的数据流动过程
并发 , 就发生在这几个过程中 。
来一张经典的示意图
本文插图
中间的部分就是并发的部分 , 只要保证cpu运算的过程是串行的 , 其他过程都可以并发执行 。
我们把数据从「等待」到「拷贝到用户空间」称作一次IO操作
其中 , 「等待数据 --- 数据拷贝到内核空间 --- cpu运算」叫做数据准备阶段 , 「数据从内核空间拷贝到用户空间」叫做数据拷贝阶段
本文插图
Linux的网络I/O模式
没有实际应用的知识是没有灵魂的 , 同样 , 没有被面试官问起的知识点都是孤独的..
当我们兴高采烈地聊到这里时 , 面试官会笑眯眯的问你
好的 , 你来讲一下linux中有哪些网络io模式吧?
本文插图
好吧算你狠 。
Linux中有五种网络io模式 , 分别是
- 阻塞 I/O
- 非阻塞 I/O
- I/O 多路复用
- 信号驱动 I/O
- 异步 I/O
【|面试官问我Linux的网络IO模式怎么办?】当我们掰着指头好不容易数出这五种模式时 , 刚才还昏昏欲睡的面试官突然眼睛一亮 , 皮笑肉不笑地对你说
不错嘛 , 那你来说说 阻塞/非阻塞 IO 和同步/异步 IO的区别吧?
搞我是吧 , 但既然人家问 , 咱也只能准备 。 要分清这四个概念 , 就要牢牢记住之前数据流动的过程
(再放一遍)
本文插图
阻塞 I/O
用户空间因为不能直接访问内核空间 , 当他想要结果时需要发起一个read调用
但数据的准备和计算是需要一个过程的 。 比如我们进行网络请求的时 , 数据还没有返回 , 这个过程需要等待 , 当数据返回后被拷贝到内核空间 , 经过一系列运算 , 最终拷贝到用户空间 。
推荐阅读
- |支付宝面试题:如果你是支付宝的产品经理,如何让更多人用支付宝点外卖?
- 开源中国|猎鹰与龙飞船基于Linux,采用C++、Chromium与JS开发
- cnBetaTB|稳步推进普及:postmarketOS现已基于Alpine Linux 3.12稳定版
- 苹果fans博客|Scott Forstall 谈他被乔布斯面试和在苹果工作的故事
- 驱动之家|Linux 之父新电脑:15 年第一次抛弃 Intel、咬牙上 AMD 32 核心
- 杰夫视点|Linux大佬“叛变”:用了十五年Intel处理器,现在喊AMD真香
- 超能网|新装置发现26个USB漏洞,Linux占了18个
- 人工智能爱好者社区|等了整整12年!Linux QQ 终于更新了
- 『操作系统』Linux系列-VMware Workstation虚拟机安装CentOS7操作系统
- 【文件】Linux Kernel 5.8 将为 blk-mq 引入内联加密支持