前言
以<深入理解计算机系统>(以下称“本书”)内容为基础,对程序的整个过程进行梳理。本书内容对整个计算机系统做了系统性导引,每部分内容都是单独的一门课.学习深度根据自己需要来定
引入
并发编程的第三种形式:线程
回顾进程
此前对进程的理解是:进程=进程空间+进程上下文.笔者再简化:进程上下文=进程空间指针,如图所示:
注:这个模型可能不严谨,但以应用作为出发点(不是专业写操作系统代码),目的是把进程上下文简化成指针,帮助理解.进程有个专门的结构来维护,叫做PCB(进程控制块),里面也包含了相关内容,此处不研究.
根据模型做了以下假设:程序运行的过程是CPU不断从进程空间调取数据处理的过程,这个过程看作进程上下文参与了.每个指令的数据都是通过上下文从进程空间传给CPU的.当CPU从当前进程切换到其他进程时(由于时间片或者信号中断),进程上下文会保存当前数据指针(进程上下文),当进程切换回来时,继续切换前进程的执行.该模型把进程两个物理部分连接了起来.
/*这个模型虽然简陋且不一定准确,但可以讲得通.*/
基于进程和基于I/O复用的并发,基于线程的并发的联系
1.进程特点:一个流一个单独进程,内核自动调度,共享数据困难.
2.I/O多路复用特点:只有一个进程,显式调度流,所有流共享整个地址空间.
基于线程的并发,是两者的混合(黑体字放一起):一个进程,所有流共享地址空间,内核自动调度.所以线程是3种方法里最后讲的,有点像将其他2种方法的优点结合起来.
线程模型
线程定义:运行在进程上下文中的逻辑流.
每个线程都有他自己的线程上下文,包括一个唯一的整数线程ID(Thread ID,TID)、栈、栈指针、程序计数器、通用目的寄存器和条件码.所有的运行在一个进程里的线程共享该进程的整个虚拟地址空间.---黑体字是原话
---解读:线程模型和进程模型基本一致.特别提到了线程有一个ID,内核通过一个整数ID识别线程
线程和进程的对比
1.线程之间是独立和对等的,进程分了父子进程,进程运行时有一些特殊要求.例如父子进程共享文件A指针,当子进程关闭文件A后,父进程也要关闭文件A,才表示完全切断和文件A的联系.
2.线程上下文比一个进程上下文小得多.所以线程切换比进程切换快得多.---黑体字是原话
---解读:照上面图而言,线程上下文和进程上下文应该差不多,都是些指针.但实际上由于进程采用虚拟空间,所以有对应页表要切换,而换页表得开销是比较大的.---进程比线程慢主要原因切换页表.
小结
线程基本概念