花了很多时间来整理这方面的相关内容,参考博客:多CPU,多核,多进程,多线程
程序和进程
- 程序: 为完成特定任务,用某种语言编写的一组指令集合,即一段静态的代码
- 进程: 是程序的一次执行过程,或是正在运行的一个程序,是一个动态的过程,比如电脑上的各种运行中的软件
进程和线程
- 进程可进一步细化为线程,是一个程序内部的一条执行路径,比如杀毒软件中的体检,杀毒,清理等都是一个进程中的多个线程
- 一个进程同一时间并行多个线程,多线程是程序有多个线程在同时执行,就表示支持多线程
- 线程是CPU调度和分配的基本单位(可以理解为CPU只能看到线程)
- 进程是操作系统进行资源分配(包括cpu、内存、磁盘IO等)的最小单位
- java默认有2个线程:main和GC
并行与并发
- 并行: 指在同一时刻,有多条指令(线程)在多个处理器(cpu上多个核)上同时执行,并行在多处理器系统中存在
- 并发: 指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行,并发可以在单处理器和多处理器系统中都存在
单核多线程
单核多线程指的是单核CPU轮流执行多个线程,通过给每个线程分配CPU时间片来实现,只是因为这个时间片非常短(几十毫秒),所以在用户角度上感觉是多个线程同时执行。
多核多线程
可以把多线程分配给不同的核心处理,其他的线程依旧等待,相当于多个线程并行的在执行
CPU的多核和应用程序的多线程的关系
多核就是系统同时可以运行多个线程,比如双核可以同时执行两个线程。单核儿只能一次执行一个线程
规律
- 单CPU中进程只能是并发,多CPU计算机中进程可以并行也可以并发。
- 单CPU单核中线程只能并发,单CPU多核中线程可以并行也可以并发。
- 无论是并发还是并行,使用者来看,看到的是多进程,多线程。