同步和异步通常用来形容方法的调用方式。 同步的方法调用时,后续行为需要等到方法执行完毕后才能执行。 异步调用时,一旦调用可以立即拿到结果,调用方可以继续后续的操作。
举个生活中的例子,两件事:煮饭、烧菜。
异步可以理解为统筹思想来解决问题,尽量不在等待中浪费时间。 在实际的产品中,异步可以增强用户体验,比如常见的消息机制,就是异步程序设计的优雅体现。
阻塞和非阻塞通常用来形容多线程间的影响。 比如一个thread1占用了临界区(主内存共享资源),另外的线程需要等待thread1使用完资源之后释放完成,才能获得资源锁。所有的等待都会导致线程挂起,导致资源占用阻塞。
死锁: 比如在双车道高速公路上并行的两辆车A、B,A想拐到B车道,B想转到A车道。现在则会发现互相等待对方开走,但是对方一直往这边转过来,一直僵持。这在程序中的多个线程互相等待就是死锁。
阿姆达尔定律是计算机并行重要的定律。定义了串行系统并行化后的加速比的计算公式和理论上限。
假设有n个处理器,t1表示优化前耗时,tn表示经过n个处理器优化后的耗时,f是程序中只能串行执行的比例。
我们可以分析出, 串行比例越低且处理器越多,加速比越高,程序优化效率越高。
如果串行比例占2/3,则无论处理器再多,最大加速比也只能达到1.5。
理想效果是,全部并行,最大加速比为 n。可以根据增加处理器无上限增强程序效率。
古斯塔夫森定律也是在表明处理器个数、并行比例和加速比之间的关系。
如果串行比例很小,那个加速比就是处理器的个数。
两个定律最低点、最高点都是一致的结论:
此条目发表在Java基础分类目录。将固定链接加入收藏夹。