• 同步、异步、阻塞、非阻塞


    一、同步与异步

    (1)所谓同步就是一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成,这是一种可靠的任务序列。

    要么成功都成功,失败都失败,两个任务的状态可以保持一致。

     (2)异步是不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完

    成了。至于被依赖的任务最终是否真正完成,依赖它的任务无法确定,所以它是不可靠的任务序列。我们可以用打电话和发短信来很好的比喻同

    步与异步操作。

    二、阻塞与非阻塞

    阻塞与非阻塞主要是从 CPU 的消耗上来说的

    (1)阻塞就是 CPU 停下来等待一个慢的操作完成 CPU 才接着完成其它的事。

    (2)非阻塞就是在这个慢的操作在执行时 CPU 去干其它别的事,等这个慢的操作完成时,CPU 再接着完成后续的操作。虽然表面上看非阻塞的

    方式可以明显的提高 CPU 的利用率,但是也带了另外一种后果就是系统的线程切换增加。增加的 CPU 使用时间能不能补偿系统的切换成本需

    要好好评估。

    三、两种的方式的组合

     四、实例

     
    IO操作分两个阶段
      1、等待数据准备好(读到内核缓存)
      2、将数据从内核读到用户空间(进程空间) 一般来说1花费的时间远远大于2。
    1上阻塞2上也阻塞是同步阻塞IO
    1上非阻塞2阻塞的是同步非阻塞IO
     
    1、假如我们去饭店点餐,如果我们付了钱后站在收银台等着饭端上来我们才离开,这就成了同步阻塞了。
    2、如果我们付了钱后给你一个号就可以离开,饭好了老板会叫号,你过来取。这就是Reactor模型。
    3、如果我们付了钱后给我一个号就可以坐到坐位上该干啥干啥,饭好了老板会把饭端上来送给你。这就是Proactor模型了。
     

    出处:

    深入分析 Java I/O 的工作机制

    参考:

    tornado: 异步、非阻塞

  • 相关阅读:
    转《编程之美——微软技术面试心得》勘误表
    第一次 学习使用 智能指针
    test _todel
    (转 todo阅读)Android 官方博客 Android应用程序的内存分析(翻译)
    msdn snmp trap 研究可否 重入 转《Multiple Trap Registrations》
    wpbars在博客园开博客了
    创业失败的10个教训总结
    winform 的一种登录方法。
    快速建立Subversion
    (转)SQL Server 按某一字段分组取最大(小)值所在行的数据
  • 原文地址:https://www.cnblogs.com/yuyutianxia/p/7657269.html
Copyright © 2020-2023  润新知