聊聊进程、线程和协程的关系

清晰的理解进程、线程和协程的关系,对深入理解计算机调度有很大的帮助。

在开始聊进程前,我们先要知道什么是程序,程序是一组计算机能够执行的指令的有序集合,是计算机硬盘上的数据文件。

进程

具有一定的独立功能的程序关于某个数据集合的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。

线程

是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行必不可缺的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他线程共享进程拥有的全部资源。

协程

又称微线程,在单线程上执行多个任务,用函数切换,开销极小。不通过操作系统调度,没有进程、线程的切换开销。

三者关系

线程可以创建和撤销另外的线程。同一个进程中的多个线程之间可以并行执行(轮流获取CPU的时间片,在总体上给人的感觉是同时在执行,这是并发,还有一个名词叫并行,就是多核多CPU,真正的同时在执行)。

相对与进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。

三者区别

进程有别于线程和协程,进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其他进程产生影响,而线程和协程只是进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一旦其他一个线程崩溃就等于整个进程崩溃,所以多进程的程序要比多线程

你可能感兴趣的:(操作系统)