今天开始阅读实战Java高并发程序设计,遇到了一个问题,同步和异步,阻塞和非阻塞这两者之间到底有什么区别,该如何理解这几个词,在知乎上看到了一个优秀的回答。
传送门:https://www.zhihu.com/question/19732473
同步和异步关注于线程对于方法调用的行为:
同步:线程调用同步方法直到方法返回调用结果才能继续执行后面的代码
异步:线程调用异步方法会立即返回,但是不会等到有结果再进行后面行为,而是继续执行后续的操作,调用的方法其实在另一个线程里执行,执行完成后会通知调用者
阻塞与非阻塞则是关注调用此方法的线程的状态
阻塞:线程在等待同步方法调用结果返回的过程时阻塞的
非阻塞:线程在该方法调用返回结果前都能继续执行后续代码,不被阻塞的状态。
并发:多个任务交替执行
并行:多个任务同时执行(多个CPU)
进程:系统资源分配和调度的最小单位,进程是线程的容器
线程:轻量级进程,程序执行的最小单位
阻塞->无饥饿->无障碍->无锁->无等待
两个重要定律:串行代码占比大,提高并行代码时间效率,加速比提高效果有限
并行代码占比大,加速比可以随着CPU的数量线性增长
java并发程序设计学习(一)
最新推荐文章于 2022-06-22 23:42:35 发布