文章目录
-
- 程序、程序和线程的区别
- 进程间通信
- 线程间通信
- 并发和并行 (单核并发,多核并行)
程序、程序和线程的区别
程序:静态存储在磁盘上(类似)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优化