进程与线程(1)- 基本概念
进程与线程
番外:对于进程与线程的困惑,我了解的一知半解。可以说,我整整困惑了两年。一直想好好彻底的弄清楚,所以在这里从三个层面对进程与线程进行剖析,希望能对你有一丢丢的帮助。
参考链接: http://python.jobbole.com/87760/
从下面几个方面解析进程与线程:
-
单核CPU是怎么执行多任务的?
操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去。表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样。
-
什么是真正的并行执行任务?
真正的并行执行多任务只能再多核CPU上实现。但是,由于任务数量远远多于CPU的核心数量,所以,操作系统也会自动把很多任务轮流调度到每个核心上执行。
-
什么是进程?
对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个Word就启动了一个Word进程。
-
什么是线程?
有些进程不止同时干一件事,比如Word,它可以同时进行打字、拼写检查、打印等事情。在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程(Thread)。
- 由于每个进程至少要干一件事,所以,一个进程至少有一个线程。同时,多个线程可以同时执行,多线程的执行方式和多进程是一样的,也是由操作系统在多个线程之间快速切换,让每个线程都短暂地交替运行,看起来就像同时执行一样。当然,真正地同时执行多线程需要多核CPU才可能实现。
-
进程与线程的区别?
- 进程是程序在某个数据集合上的一次运行活动;线程是进程中的一个执行路径
- 进程是系统资源分配的单位;线程是系统调度的单位
- 进程之间不能共享资源;线程共享所在的进程的地址空间和其他资源
- 进程拥有自己独立的地址空间(一个进程崩溃后,在保护模式下不会对其他进程产生影响);而线程没有,线程必须依赖于进程而存在,线程有自己的堆栈和局部变量,线程之间没有独立的地址空间,线程之间共享地址空间(一个线程死掉就等于整个进程死掉)。因此,多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率差一些。