用通俗易懂的方式讲IO的五种模型

我们经常提到 IO、NIO 这些名词。那么,到底什么是 IO 呢?什么又是 NIO 呢?

另外,我们平时又会听到两组很相似的概念:阻塞 / 非阻塞、同步 / 异步。那么,阻塞和非阻塞有什么区别呢?同步和异步又有什么区别呢?很多同学对这两组概念都比较容易混淆,也讲不清楚。

所以,本期教程就从网络 IO 的角度出发并用生活中常见的案例来白话 IO 的五种模型,以及上面两组概念。

用户空间和内核空间

操作系统的核心是内核,它独立于普通的应用程序,可以访问受保护的内核空间,也有访问底层硬件设备的所有权限。为了保护内核的安全,现在操作系统一般都强制用户进程不能直接操作内核,所以操作系统把内存空间划分成了两个部分:内核空间和用户空间。

用通俗易懂的方式讲IO的五种模型

 

这就好比,饭店老板把整个饭店划分成两个部分:大厅和厨房。大厅用于顾客吃饭,厨房用于厨师做饭,厨房的门上面一般还会写着:“厨房重地,闲人免进”,也就是顾客一般不具有直接使用厨房的特性。

用通俗易懂的方式讲IO的五种模型

 

所以,当我们使用 TCP 发送数据的时候,需要先将数据从用户空间拷贝到内核空间,再由内核操作将数据从内核空间发送出去;当我们使用 TCP 读取数据的时候,数据先在内核空间准备好,再从内核空间拷贝到用户空间供用户进程使用。

用通俗易懂的方式讲IO的五种模型

 

这就好比,当我们在饭店吃饭的时候,先在客厅点好菜,再由服务员把我们的菜单传递进厨房;当厨房做好了菜,再从厨房由服务员传递到客厅一样。

所以,一次 IO 的读取操作分为两个阶段(写入操作类似):

  • 等待内核空间数据准备阶段
  • 数据从内核空间拷贝到用户空
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值