美文网首页
IO模型的介绍

IO模型的介绍

作者: 麟之趾a | 来源:发表于2020-04-16 23:21 被阅读0次

    概念介绍

    同步

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

    异步

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

    阻赛

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

    非阻赛

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

    注:以上只是概念,并不是真正的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

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

    相关文章

      网友评论

          本文标题:IO模型的介绍

          本文链接:https://www.haomeiwen.com/subject/pgmjvhtx.html