我的观点

首先,分开各自理解。

1. 同步:描述两个(或者多个)个体之间的协调关系。

比如,单线程中,methodA调用了methodB,methodB返回后,methodA才往下执行,那么称A同步调用了B。

比如,多线程中,线程1访问完某个资源,才到线程2访问。

同步在一定的 互斥基础上,强调的是有序性。(另外,互斥强调的是排他性,我在用的时候你不许用。)

2. 异步:我觉得是指个体之间并没有协调关系,你走你的阳关道,我走我的独木桥。

比如,线程往线程池里面提交了FutureTask,就继续往下执行,A叫B帮自己倒杯咖啡,而A自己干别的事去了。

阻塞与非阻塞,都是线程或进程的状态。

3. 阻塞:线程或进程被挂起,失去了cpu的使用权。

4.非阻塞:就正常运行下去。

非要把两种概念扯起来理解是没必要的,对于发生的一件事,从两种不同的角度去理解即可,如果非要根据这两种概念去造出一件事,那么很可能自己会混淆(易混淆的一个点为,同步和阻塞在某种层面上表现为“等”),而且这件事还不对。

比如 BIO中的accept(),调用时线程会一直阻塞,失去cpu的使用权直到有人连上来,这时候,假如线程又回到运行态,如果不去读取出来,后面的人还连不上。

(注意线程每次系统调用时,要从用户态切换到内核态)

到这里相信已经这几个概念已经比较清晰了,还要说什么同步阻塞,同步非阻塞?

所见网上的例子,我认为这样理解是不恰当

老张爱喝茶,废话不说,煮开水。

出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。

1 老张把水壶放到火上,立等水开。(同步阻塞

老张觉得自己有点傻

2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞

老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。

3 老张把响水壶放到火上,立等水开。(异步阻塞

老张觉得这样傻等意义不大

4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞

我只分析第4点这里,了再去拿壶。

但是老张如果没有一直在听的话又怎么知道它响没响呢?是不是可以把一直在听也看作是一种轮询呢?那这样的话又和同步非阻塞的例子有什么不同呢?这绝不是找茬,因为谁通知谁,怎么通知的,怎么接收通知的,这很重要!

其他的例子更是漏洞百出。

我就说扯起来讲没必要吧。

我的例子

如果你真的要等某件事发生才能往下执行的话(同步),那你就应该阻塞等它完成(免得你一直问一直问,浪费资源)。如果你非阻塞,还不一直问他就执行往下执行干其他事去,那说明你并不是非等他完成不可,那何不等你真的要依赖他的时候再阻塞等候呢。

而异步说明这两个人没有关系,你做你的(你可以睡一觉阻塞,也可以不阻塞),他做他的。

最新文章

  1. 实现在Android 进程和线程
  2. Java--剑指offer(9)
  3. Gradle build设置自动log开关
  4. JavaScript跨域总结与解决办法
  5. MFC基于Dialog的工程中使用OSG
  6. 14、SQL基础整理(存储过程)
  7. ubuntu(Eclipse+JDK) 自动安装脚本
  8. WordPress /wp-admin/includes/post.php user_ID 参数操作权限提升漏洞
  9. android——fragment详解
  10. Esper学习之五:EPL语法(一)
  11. 用css绘制各种图形
  12. extract-text-webpack-plugin 的使用及安装
  13. 搭建MHA测试
  14. Cesium调用 WMS 、WMTS 服务
  15. 软件发布时的 GA、RC、Beta
  16. GoLang基础数据类型-切片(slice)详解
  17. 4月22 mysql常用函数
  18. focus、input、keydown、keyup、change、blur方法的差异
  19. mysql 更新(九) pymysql模块的使用
  20. Dual-voltage regulator meets USB-power needs

热门文章

  1. 算法笔记codeup-Contest100000568
  2. java常量 数据类型
  3. python 快速创建字典 fromkes()
  4. (树形DP入门题)Anniversary party(没有上司的舞会) HDU - 1520
  5. LeetCode动画 | 1038. 从二叉搜索树到更大和树
  6. 使用Razor 使用Razor表达式处理命名空间 精通ASP-NET-MVC-5-弗瑞曼
  7. Spring-Cloud之Eureka注册中心环境搭建(单节点)
  8. Android教程2020 - RecyclerView显示多种item
  9. 虚拟机 ubuntu系统忘记密码如何进入
  10. CUDA学习(五)之使用共享内存(shared memory)进行归约求和(一个包含N个线程的线程块)