鲜衣怒马少年时,且歌且行且从容。
1.进程
进程就是正在运行的程序,他是系统资源调度的独立单位,各个进程间不会相互影响,因为每一个进程都会有操作系统给它分配自己的内存空间和系统资源。进程创建慢,上下文切换开销大。
2.单进程和多进程
单进程计算机只能做一件事情,而多进程计算机可以同时做很多间事情,例如:在写代码时听音乐。因此多进程的提高了CPU的利用率,减少了CPU的空闲时间。
3.线程
线程是轻量级的进程,是程序执行、CPU调度的最小单位。线程是依赖于进程运行的,一个进程可以有一个或多个线程。
- 一个进程只有一个线程,则称该应用程序为单线程程序。
- 一个进程有两个及以上线程,则称该应用程序为多线程程序。
所以线程是进程当中的一个执行单元,真正的负责程序的执行。
4.进程与线程的关系
线程是进程的子集,每个进程之间相互独立,拥有自己的内存空间和系统资源,同一个进程下的多个线程可以共享该进程下的堆内存,但每个线程的栈内存是线程私有的。
5.单线程与多线程
单线程指一个进程只有一个线程,多线程则是一个进程下有多个线程。使用多线程的原因有以下几点:
- 多核CPU下更快的执行效率:一个程序作为一个进程运行,可以创建多个线程,而一个线程在一个时刻只能运行在一个CPU核心上。在多核CPU下,可以将不同的线程交给不同的CPU去执行,可以实现程序的并行运行,显著提高程序的运行速度。
- 单核下提高CPU利用率:在单核下,多线程也是有意义的,比如IO操作阻塞的时候,是不需要CPU参与的,这时候CPU就可以另开一个线程去做别的事情,等待IO操作完成再回到之前的线程继续执行即可。
- 更快的响应时间:将数据一致性不强的操作派发给其他线程处理,如发送邮件,使得响应用户请求的线程能够快速处理完成,缩短响应时间。
注意:多线程下,创建线程以及线程间的上下文切换会影响到多线程的执行速度,因此多线程的执行速度并不一定就比单线程快。多线程有以下弊端:
- 创建线程和线程间的上下文切换,会导致程序运行变慢。
- 多线程程序必须非常小心地同步代码,否则会引起死锁。
- 多线程程序极难调试,并且一些bug非常隐蔽,可能你99次运行都是对的,但是有1次是错的。不像单线程程序那么容易暴露问题。
6.并发
单核 CPU下,线程实际还是 串行执行 的。操作系统将 CPU的时间片分给不同的程序使用,只是由于 CPU在线程间(时间片很短)的切换非常快,人类感觉是 同时运行的 。总结为一句话就是: 微观串行,宏观并行。
因此一段时间内,多个线程间不停的来回切换执行的现象就是并发。
7.并行
多核CPU下,每个核(core) 都可以调度运行线程,这时候线程可以是并行的。并行就是某一时刻,多个线程同时执行。
因此,多核CPU下可以有并发,也可以有并行;而单核CPU下只有并发。简单总结就是:并发是交替执行多个任务,并行是真正的同时执行多个任务。