在面试中,经常会有面试官问题“进程、线程和协程的区别”这个问题,这也是大学课程操作系统中最基本的知识。我们通常对此都说上几句,但细节又不是特别深入明了。我整理了一下相关的内容,加上自己的理解,与君共享。
1. 进程
1.1 定义
进程是计算机中程序的一次运行活动,是操作系统进行资源分配和调度的基本单位。每一个进程都拥有自己的地址空间,一般包括代码段、数据段、堆和栈。其中,代码段用来存放处理器执行的代码;数据段存放全局和静态变量;堆用来存放动态分配的内存;栈用来存放局部变量、函数参数和寄存器的值等。
1.2 进程切换
多个进程同时运行时,为了保证所有进程都能获得执行机会,就需要按照一定的算法不断地进行进程切换。所谓进程切换就是从运行中的进程中收回处理器,然后再使待运行进程来占用处理器。从某个进程收回处理器,实质上就是把进程运行过程中寄存器的中间数据存放到进程的堆栈。让某个进程来占用处理器,实质上是把这个进程存放在堆栈中的寄存器数据恢复到处理器的寄存器中去,并把待运行进程的断点送入处理器的程序计数器。
一个进程存储在处理器各寄存器中的中间数据叫做进程的上下文,所以进程切换就是被中止进程与待运行进程上下文的切换。进程切换上下文时,需要进出操作系统内核,并进行寄存器数据切换等工作,都需要一定的时间开销。
1.3 进程函数
-
pid_t fork(void)
功能:创建一个子进程
-
int clone(int (*fn)(void ), voidchild_stack, int flags, v