一、须知
对于操作系统来说,空间会分为用户空间与内核空间
用户空间:用户程序的运行空间。为了安全,它们是隔离的,即使用户的程序崩溃,内核也不会受到影响。只能执行简单的运算,不能直接调用系统资源,必须通过系统接口(system call),才能向内核发出指令。
内核空间:这是Linux内核的运行空间,可以执行任意命令,调用系统的一切资源
通过用户空间 访问 系统空间 并让其帮助我们完成我们所需要执行的操作或者任务
二、网络io模型
网络IO的本质是socket的读取,socket在linux系统被抽象为流,IO可以理解为对流的操作 对于系统来说用户空间需要访问内核空间的方式就是通过socket,而socket在linux中实际上就是一个文件resouce 或者说是一个资源;那么网络io模型就是 用户空间 去访问 内核空间的方式;
你可以这么理解:你去上厕所,然后发现有人在上厕所,你是选择一直等还是玩一会再看看好了没? 厕所在这里我们可以理解为是:系统的内核空间,
你就是:用户空间, 然后发现有人在上厕所:代表内核空间正在处理其他事情
这是一个很有味道的话题
五大io模型分为:
- 阻塞模型
- 非阻塞模型
- io多路复用模型
- 信号模型
- 异步io模型
三、阻塞模型
一句话解释:一直在哪儿干等,不做其他事;(看你什么时候出来)
图片
说明:这种模型在用户空间会一直阻塞等待内核空间是否ok;
四、非阻塞模型
一句话解释:一边玩手机,一边看是不是可以了;
图片说明:用户空间会设置为非阻塞,同时会通过轮询的方式不断访问内核空间是否ok;
五、io多路复用模型
一句话解释:这里我们借助烧水来理解,对于烧水我们希望可以更快的烧很多的水,那么我们可以通过买多个烧水壶,同时也会对应多个火炉子;
我们:用户空间
火炉子:内核空间
烧水壶:资源/socket(用户与内核通信的内容)
我们接水:代表连接
烧水过程:内核处理事情
io多路可以这么理解,你需要烧很多的水,准备了很多个烧水壶,一个火炉子;我们可以在烧水的时候去用其他空的水壶接水然后在哪儿等待;(值得注意的是io多路并非多线/进程)
专业点就是 在用户空间访问内核空间的时候,可以通过重复利用多个连接
图片对于内核来说处理还是一个单线程的
六、信号模型
一句话解释:在烧水的时候设置一个信号,完成了就吱一声
图片说明:用户空间事先向内核空间设置一个信号,完成了内核空间就会根据信号回调用户空间所设置的回调函数
七、异步io模型
一句话解释:火炉子升级了变成了一个智能的(代表 linux 2.6以上的版本);我自己事先设置在早上我准备起床的时候帮我接水,在我准备喝水的时候帮助我烧好水了
简称人工智能
图片说明:就是用户空间向内核空间设置好连接事件,接收事件,发送事件等;由内核空间根据不同的事件自动触发处理执行;
网友评论