IO模型的介绍

2020-04-16  本文已影响0人  麟之趾a

概念介绍

同步

一个进程在等待另一个进程返回结果,如果另一个进程不返回,这个进程会一直等待,同步只是个状态

异步

一个进程在等待另一个进程返回结果时,如果另一进程不返回结果,这个进程就会往下走,给另一个进程,一个标记,当另一个进程返回结果时,可以通过这个标记找到当前进程。

阻赛

一个进程等待另一个进程返回结果时,这个进程就会进入休眠状态。当结果返回时,这个进程就会唤醒

非阻赛

一个进程等待另一个进程返回结果时,这个进程会一直询问,另一个进程,你好了没有?所以这个进程会一直处于忙碌状态

注:以上只是概念,并不是真正的IO模型

模型介绍

前提准备

复制文件过程的进程

1 .进程从磁盘读出文件
2 .文件从内核内存,复制到用户内存

阻赛型

image.png

用户进程,在第一步从磁盘读取文件的过程,用户进程就休眠了,等待返回结果之后,进行第二步,然后接着等待

非阻赛型

image.png

用户进程在,第一步从磁盘读取文件的过程,用户进程会一直询问,你读取好了吗。读取完成后,到了第二步,用户进程也会进入休眠状态,又成为了阻赛型。

注:如果进程进入休眠状态,crtl+c是结束不了进程的,即这个进程不会接受任何信号。如果这个进程需要等待多个进程的结果,阻赛型IO和非阻赛型IO都不满足这个需求

复合型

image.png

复合型,是用户进程通过内核监控进程的一个机制,让内核代理监控。但图中的第一步和第二步都是阻赛的,两个进程,当有一个结果返回时,内核这种机制就会返回给用户进程。用户进程这次不是阻赛在单纯的一个进程,而是阻赛在内核监控进程的进制这。通过内核这种机制提高了并发能力
select()就是复合型的,select()相当于内核监控进程的机制。它最多允许底下有1024个进程,即最大并发1024,BSD研发的
poll() 也是复合型,它可以监控无数多的进程。有贝尔实验室研发。
1024个进程是BSD发现的最优性能方案,即使无数多的线程,其性能也与1024个进程差不多

事件驱动型

image.png

用户进程,在第一步读取文件的过程,用户进程会自己干别的事情,不会等待。当第一步返回结果了,此时用户进程才会阻赛状态,等待第二步的执行。
epoll()模式就属于事件驱动型。linux上的
kqueue()模式也属于事件驱动型。BSD上的

异步模型

image.png

用户进程在第一步从磁盘读取数据,和第二步复制数据时。都去干别的事情,当第二步处理好了之后。返回给用户进程

上一篇下一篇

猜你喜欢

热点阅读