写在前面
文中有较多的内容为转载,尽量指出转载来源。
1 进程(process)
定义:进程是正在运行程序的实例。
如chrome 进程的三种状态:
就绪态
执行态
阻塞态
进程是基于计算机系统的异常。进程切换是需要保存上下文环境(一些寄存器,以及栈的信息。 子进程和父进程具有相同的文件描述符。 不同的进程具有不同的地址空间,变量无法共享。调度有操作系统完成。process 由 process control block (PCB)控制 ;。
2 线程(thread)
一个进程,包含多个线程 线程是一种轻量进程,实际上在linux内核中,两者几乎没有差别,除了一点——线程并不产生新的地址空间和资源描述符表,而是复用父进程的。线程的调度和进程一样,都必须陷入内核态。调度有操作系统完成(thread 由 thread control blocks (TCBs)控制)。 线程模型主要通过陷入切换上下文。。
多线程的地址空间.png
3 协程(coroutine)
一个线程,包含多协程。协程由应用程序实现调度,线程由操作系统实现调度,不需要陷入内核。
3.1 函数调用[2]
函数,所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕