进程线程的区别
知乎专栏求赞
进程与线程的概念
-
进程
为了可以通过时分共享技术可以让多个程序在一颗 CPU
上并发执行,达到虚拟化 CPU
的效果,引入了进程的概念。
进程是程序执行的过程。
-
线程
为了解决进程切换耗费资源,通信困难的问题,引入了线程的概念。
线程是进程的一部分,描述指令流的状态,是指令执行流的最小单位,是进程的更细粒度。
-
协程(拓展)
为了解决线程切换耗费资源,线程耗费内存的问题,又引入了协程的概念。
协程是线程的更轻量级,线程是由操作系统调度的,但是协程是由代码自己来实现不同协程之间的切换的,协程参考内核通过 CPU 寄存器切换线程的方法,在用户态代码中实现了协程的切换。
例如 Python
中 通过 yield
关键字实现协程的中断切换
进程线程之间的区别
其实进程和线程只是 CPU
一个时间段的描述,只不过粒度大小不同
-
从占据资源的角度来看
进程是拥有系统资源的独立单位,线程自己不独立拥有系统资源,线程共享进程的 IO
CPU
内存等资源, 所以进程有自己独立的地址空间,线程共享所属进程的地址空间
-
从切换所消耗的资源
进程切换涉及进程上下文切换,耗费资源多。线程切换只需切换少量寄存器内容,耗费资源少。
-
从通信方式
进程通信依靠 IPC
进行,线程可以通过全局变量通信
-
从健壮性
多线程程序只要有一个崩溃,整个程序就崩溃了。但是多进程程序,各个进程都有自己独立的地址空间,更加健壮。