一、什么是阻塞、非阻塞、同步、异步

  我们以A线程调用B线程的过程例子来讲解这四个概念

  在一个程序里,A调用B了,此时如果是

  同步:

  A必须等待B返回结果后,才能继续执行,但是在这期间A会一直监控B的返回状态。

  异步:

  A无需等待B的返回结果,当B执行完成后,会通知A来调用。

  阻塞:

  A一直等待B返回结果,在这期间A不能够执行后续的操作。

  非阻塞:

  A无需等待B的返回结果,就能够继续执行后续的操作。

  根据这四个的定义我们可以发现:

  同步和异步指的是通知线程任务的一种机制:同步就是A必须等待B有结果才会通知继续执行;异步是A可以先执行,当B有了结果自动通知A。

  阻塞和非阻塞指的是线程等待结果时的状态,如果阻塞是线程就不继续执行,如果非阻塞线程还可以继续执行。

二、四种IO常见的模型

  了解了上面四种模型后,我们在开发中常常会遇到的IO模型

  同步阻塞:一个任务必须做完才能继续做其他任务。

  这个就很好理解,就是我们的单线程任务。根据上面的定义我们知道这种模型性能是很差的,但编码结构一定是最简单的。

  异步阻塞:异步操作是可以被阻塞住的,只不过它不是在处理消息时阻塞,而是在等待消息通知时被阻塞。

  这个定义是不是非常的绕口,因为这个模型是基本不会使用的。

  同步非阻塞:不必关心这件事情做完没有,就去做另一件事情,但是会一直监控这件事有没有做完。

  虽然根据定义,我们会认为同时做两件事情就会很快,其实不然这种机制效率也是很低的。因为你需要一直去监控任务的结果,就会使得程序进行线程的来回切换,导致性能下降。

  异步非阻塞:同时做两件事情

  这个模型是在网络编程和I/O编程中用的最多,效率最高,因为你不需要去时时监控事情是否已经做完。

最新文章

  1. .NET 对接JAVA 使用Modulus,Exponent RSA 加密
  2. Css样式表【边界边框】【列表方块】
  3. Netty(三)TCP粘包拆包处理
  4. ssi项目(1)环境搭建
  5. python类相关
  6. 虚拟机Linux----Ubuntu1204----退格键方向键无法使用
  7. 一.JSP开发的工具下载与环境搭建
  8. 百度云观测优化建议解决方案:未设置max-age或expires
  9. sql 函数 总结
  10. MySQL必知必会笔记<1>
  11. quick-cocos2d-x教程8:程序框架内lib文件夹分析
  12. winform 实现选择的城市名单
  13. Web爬去的C#请求发送
  14. 机器学习 —— 基础整理(七)前馈神经网络的BP反向传播算法步骤整理
  15. XAF 框架中,自定义参数动作(Action),输入参数的控件可定义,用于选择组织及项目
  16. P1019 单词接龙
  17. 三篇文章带你极速入门php(三)之php原生实现登陆注册
  18. Mathematics | Mean, Variance and Standard Deviation
  19. SSH框架整合开发具体解释(个人笔记)
  20. linux命令(36):vimdiff文件对比

热门文章

  1. hibernate映射简单实例
  2. Jmeter之保存响应到文件
  3. c++读取utf-8格式中英文混合string
  4. 【ABAP系列】SAP 系统的消息类型分析 MESSAGE TYPE
  5. unity让碰撞只发生一次
  6. mysql源码包安装
  7. 简单的遍历xml
  8. [DS+Algo] 007 希尔排序及其代码实现
  9. JavaScript ES6 class指南
  10. 安装libpng库