并发、并行
并发执行图 并行执行图并发(concurrent):是同一时间应对(dealing with )多件事情的能力。
并行(parallel):是同一时间动手做(doing)多件事情的能力。
— Rob Pike
同步、异步
从方法调用的角度来讲:
- 需要等待结果返回,才能继续运行就是:同步;
- 不需要等待结果返回,就能继续运行就是:异步。
注意:同步在多线程中还有另外一层意思,是让多个线程步调一致。
单线程、多线程
- 单核cpu下,多线程不能实际提高程序运行效率。
多线程只是为了能够在不同的任务之间切换,不同线程轮流使用cpu,不致于一个线程占用cpu,别的线程没法干活。 - 多核cpu可以并行跑多个线程,但能否提高程序运行效率还是要分情况的:
- 有些任务,经过精心设计,将任务拆分,并行执行,当然可以提高程序的运行效率。但不是所有计算任务都能拆分(参考【阿姆达尔定律】)
- 也不是所有任务都要拆分,任务的目的如果不同,谈拆分和效率没啥意义。
- IO操作不占用cpu,只是我们一般拷贝文件使用的是【阻塞IO】,这时相当于线程虽然不用cpu,但需要等待IO结束,没能充分利用线程,所有才有后面的【非阻塞IO】和【异步IO】优化。
并发的三大特性
- 原子性
一个操作中,cpu不可以中途暂停然后在调度。既不被中断操作,要么全部执行,要么全部不执行。 - 可见性
当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看到修改的值。 - 有序性
网友评论