Linux五大网络IO模型

2021-04-09  本文已影响0人  Acto

一、须知

对于操作系统来说,空间会分为用户空间与内核空间

用户空间:用户程序的运行空间。为了安全,它们是隔离的,即使用户的程序崩溃,内核也不会受到影响。只能执行简单的运算,不能直接调用系统资源,必须通过系统接口(system call),才能向内核发出指令。
内核空间:这是Linux内核的运行空间,可以执行任意命令,调用系统的一切资源

通过用户空间 访问 系统空间 并让其帮助我们完成我们所需要执行的操作或者任务

二、网络io模型

网络IO的本质是socket的读取,socket在linux系统被抽象为流,IO可以理解为对流的操作 对于系统来说用户空间需要访问内核空间的方式就是通过socket,而socket在linux中实际上就是一个文件resouce 或者说是一个资源;那么网络io模型就是 用户空间 去访问 内核空间的方式;

你可以这么理解:你去上厕所,然后发现有人在上厕所,你是选择一直等还是玩一会再看看好了没? 厕所在这里我们可以理解为是:系统的内核空间,
你就是:用户空间, 然后发现有人在上厕所:代表内核空间正在处理其他事情

你是选择一直等还是玩一会再看看好了没?:代表通信的方式 图片

这是一个很有味道的话题

五大io模型分为:

  1. 阻塞模型
  2. 非阻塞模型
  3. io多路复用模型
  4. 信号模型
  5. 异步io模型

三、阻塞模型

一句话解释:一直在哪儿干等,不做其他事;(看你什么时候出来)


图片

说明:这种模型在用户空间会一直阻塞等待内核空间是否ok;

四、非阻塞模型

一句话解释:一边玩手机,一边看是不是可以了;

图片

说明:用户空间会设置为非阻塞,同时会通过轮询的方式不断访问内核空间是否ok;

五、io多路复用模型

一句话解释:这里我们借助烧水来理解,对于烧水我们希望可以更快的烧很多的水,那么我们可以通过买多个烧水壶,同时也会对应多个火炉子;

我们:用户空间
火炉子:内核空间
烧水壶:资源/socket(用户与内核通信的内容)
我们接水:代表连接
烧水过程:内核处理事情

io多路可以这么理解,你需要烧很多的水,准备了很多个烧水壶,一个火炉子;我们可以在烧水的时候去用其他空的水壶接水然后在哪儿等待;(值得注意的是io多路并非多线/进程)

专业点就是 在用户空间访问内核空间的时候,可以通过重复利用多个连接

图片

对于内核来说处理还是一个单线程的

六、信号模型

一句话解释:在烧水的时候设置一个信号,完成了就吱一声

图片

说明:用户空间事先向内核空间设置一个信号,完成了内核空间就会根据信号回调用户空间所设置的回调函数

七、异步io模型

一句话解释:火炉子升级了变成了一个智能的(代表 linux 2.6以上的版本);我自己事先设置在早上我准备起床的时候帮我接水,在我准备喝水的时候帮助我烧好水了

简称人工智能

图片

说明:就是用户空间向内核空间设置好连接事件,接收事件,发送事件等;由内核空间根据不同的事件自动触发处理执行;

【转自】https://user.qzone.qq.com/2598352200/blog/1578902149

上一篇 下一篇

猜你喜欢

热点阅读