- 程序,进程和线程之间的区别
- 进程间通信
- 线程间通信
- 并发和并行 (单核并发,多核并行)
程序:在磁盘上静态存储(类似Java中的类)
进程:加载到内存,可以被执行的,可以看成程序的实例(类似Java中的对象);基本相互独立,而线程存在于进程内,是进程的一个子集
线程:一个进程可以分成多个线程,一个线程就是一个指令流,线程顺序执行
进程间通信比较复杂,同一台计算机的进程通信称为IPC(Inter-process communication)
线程间通信- 线程间通信相对简单,因为他们共享进程内的内存
- 多个线程可以访问同一个变量
- 线程更轻量,线程上下文切换成本一般要比进程上下文切换低
- Java中每个方法就是个线程
单核CPU下,线程实际还是串行执行,操作系统中有个组件叫 任务调度器,将CPU的时间片分给不同的线程使用,只是由于CPU在线程间切换非常快,所以感觉是同时运行,总结为一句话:微观串行,宏观并行
- 并发(concurrent)是同一时间应对(deal)多件事情的能力
- 并行(parallel)是同一时间动手做(doing)多件事情的能力
- 单核CPU下,多线程不能实际提高程序运行效率,只是为了能够在不同的任务之间切换,不同线程轮流使用CPU,不至于一个线程总占用CPU,别的线程没法干活
- 多核CPU可以并行跑多个线程,但能否提高程序的运行效率还是要分情况的,有些任务经过设计,将任务拆分并执行,当然可以提高程序的运行效率。但不是所有计算任务都能拆分,参考 阿姆达尔定律;也不是所有任务都需要拆分,任务的目的如果不同,谈拆分和效率没什么意义
- IO操作不占用CPU,只是我们一般拷贝文件使用得的是阻塞IO,这是相当于线程虽然不用CPU,但需要一直等待IO结束,没能充分利用线程,所有才有后面的非阻塞IO和异步IO优化



