专栏首页个人分享同步与异步 阻塞与非阻塞

同步与异步 阻塞与非阻塞

1.1所采用生活中的事件:

          我要去银行办理存钱业务,因为人多,需要排队等待。

          1)排队分为在队伍中等待和取号等待两种。在队伍中等待,那么我就需要不断的看看前面的人办理完了没。如果选择取号等待,那么我就比较安逸了,我就不必去管前面的人是否已经办理,我只需要等待别人通知我就行了。也就是这两种方式,一种是自己去做,一种是别人来做。二者孰优孰劣,一目了然。

          2)当然,在排队过程中,我们有时候会打电话发短信看书等来消磨时间。那么如果是在队伍中等待,我进行打电话发短信看书的动作,那么我既要看前面的人是否办理完毕,又要进行打电话发短信和看书的动作,实在是费力啊。而如果我是选择取号等待呢,那么我就坐在沙发上,打电话发短信看书,一心一用,爽哉。

1.2对应技术的问题:

          我所选择的排队方式就对应同步与异步。在队伍中等待就是同步,取号等待就是异步。

          我在等待过程中,能够进行打电话发短信看书的动作,就是非阻塞。如果在等待过程中,不能够进行打电话发短信看书的动作,那就是阻塞。

1.3小结:

     同步和异步仅仅是关于所关注的消息如何通知的机制,而不是处理消息的机制.也就是说,同步的情况下,是由处理消息者自己去等待消息是否被触发,而异步的情况下是由触发机制来通知处理消息者

2.同步、异步、阻塞、非阻塞的理解

2.1同步阻塞I/O

     官方解释:用户空间的应用程序执行一个系统调用时,会导致应用程序阻塞。只有等系统调用结束(数据传输完成或发生错误),用户控件的应用程序才会继续执行。

     我的理解:就是我去银行存钱时,我不得不在队伍中排队等待,而且在等待过程中我啥都不能干,只能等着。多么苦闷啊。

2.2同步非阻塞I/O

     官方解释:

     我的理解:我去银行存钱时,我不得不在队伍中排队等待,但我在等待过程中我还会打电话看书。我既要看前面的人是否结束业务的办理,又要打电话看书,太累了。程序猿苦逼,排队办业务还得一心两用。

 2.3异步阻塞I/O

     官方解释:另外一个阻塞解决方案是带有阻塞通知的非阻塞 I/O。在这种模型中,配置的是非阻塞 I/O,然后使用阻塞 select 系统调用来确定一个 I/O 描述符何时有操作。使 select 调用非常有趣的是它可以用来为多个描述符提供通知,而不仅仅为一个描述符提供通知。对于每个提示符来说,我们可以请求这个描述符可以写数据、有读数据可用以及是否发生错误的通知。(理解有难度)

     我的理解:我去银行存钱时,我取号等待,我就等着别人来通知我办理业务,但是在等待过程中,我什么都不能做,只能等待。想想你在等待过程中,啥都不能做,是多么难受。

2.4 异步非阻塞I/O(AIO)

     官方解释:异步非阻塞 I/O 模型是一种处理与 I/O 重叠进行的模型。读请求会立即返回,说明 read 请求已经成功发起了。在后台完成读操作时,应用程序然后会执行其他处理操作。当 read 的响应到达时,就会产生一个信号或执行一个基于线程的回调函数来完成这次 I/O 处理过程。

     我的理解:我去银行存钱时,取号等待,在等待时我可以看看书打打电话,等着别人通知我就可以啦。

3.总结

     同步与异步是一组相对概念,针对的是自己等待还是别人通知

     阻塞和非阻塞是一组相对概念,针对的是等待过程中,等待者的操作。

转自:http://blog.csdn.net/yankai0219/article/details/8018232

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Hadoop源码学习之HDFS(一)

      Hadoop的HDFS可以分为NameNode与DataNode,NameNode存储所有DataNode中数据的元数据信息。而DataNode负责存储真正...

    用户3003813
  • Hadoop的管理目录

    1、NameNode的文件结构,NameNode会创建VERSION、edits、fsimage、fstime文件目录。其中dfs.name.dir属性是一个目...

    用户3003813
  • Hadoop系统架构

    步骤1 用户向YARN 中提交应用程序, 其中包括ApplicationMaster 程序、启动ApplicationMaster 的命令、用户程序等。

    用户3003813
  • 值得借鉴的eQTL可视化形式

    eQTL的分析结果本质就是一些调控基因表达的SNP位点,在结果展示时,最经典的可视化方式如下

    生信修炼手册
  • SUMO使用教程(三)

    vehicle标签下面有一个子标签route,vehicle标签指的就是一辆车,而route则是这辆车将行驶过的路径。vehicle标签的id属性就是车辆的...

    钱塘小甲子
  • 【Go 语言社区】如何实现单服务器300万个长连接的?

    不是吹牛,理论上完全可以达到。 (以下参考值皆是Linux平台上) 1,Linux单个进程可以维持的连接数(fd)理论值是通过ulimit -a设置,或在se...

    李海彬
  • 独角兽的CTO是怎么炼成的

    历任:领英(LinkedIn)副总裁,赤兔技术创始人,FreeWheel高级副总裁及中国区总经理。

    叶锦鲤
  • Matlab 航模挂载设计

    题目 航模组决定对某款航模的挂载能力进行改造测试,希望获得最大的飞行性能评价值。航模挂载设备的体积V(单位:cm3)和重量M(单位:g)均会影响飞行性能评价值,...

    Pulsar-V
  • Cypress web自动化19-自定义命令,把登陆当公共方法commands.js

    测试一个web网站的时候,通常需要先登录。要是每个脚本都写一次登录流程,太麻烦了,于是我们会想到写一个公共函数,这样每次去调用函数即可。 cypress 里面提...

    上海-悠悠
  • Python3 与 C# 基础语法对比(Function专栏)

    汇总系列:https://www.cnblogs.com/dunitian/p/4822808.html#ai

    逸鹏

扫码关注云+社区

领取腾讯云代金券