线程原理篇——>第7章 线程

第7章 线程

7.1 进程的分身术——线程

进程与线程的区别(面试题)

线程就是我们为了让一个进程能够同时干多件事情而发明的“分身术”。

线程的本质:拥有同样的程序文本。

线程是进程里面的一个执行上下文或者执行序列。一个进程可以拥有多个执行序列。

在线程模式下,一个进程至少有一个线程,但也可以有多个线程。

将进程分解为线程还可以有效利用多处理器和多核计算机。在没有线程的情况下,增加一个处理器并不能让一个进程的执行速度提高。但如果分解为多个线程,则可以让不同的线程同时运转在不同的处理器上,从而提高进程的执行速度。

7.2 线程管理

评判标准:如果某资源不独享会导致线程运行错误,则该资源就由每个线程独享;而其他资源都由进程里面的所有线程共享。

一般情况下线程共享和独享资源的划分

序号

线程共享资源

线程独享资源

1

地址空间

程序计数器

2

全局变量

寄存器

3

打开的文件

4

子进程

状态字

5

闹铃

 

6

信号及信号服务程序

 

7

记账信息

 

 

7.3 线程模型的实现

用户态和内核态的区别(面试题)

进程的调度有两种。一、进程的调度交给线程;二、将线程的调度交给操作系统。

这两种不同的调度形成了线程的两种实现:用户态实现和内核态实现。由进程自己管理就是用户态线程,由操作系统管理就是内核态线程实现。

用户态和内核态的判断以线程表所处的位置为依据:位于内核叫做内核态实现,位于用户层叫做用户态实现。

 

线程的实现方式。因为线程是进程内部的东西,所以,存在由进程直接管理线程的可能性。因此,线程存在着内核态与用户态两种实现可能。

7.3.1 内核态线程实现

 

7.3.2 用户态线程实现

用户态实现就是用户自己做线程的切换,自己管理线程的信息,而操作系统无须知道线程的存在。

用户态如何进行线程调度呢?用户自己写一个执行系统(runtime system)作调度器,即成了正常执行任务的线程外,还有一个专门负责线程调度的线程。用户态下的运行,是一个线程在执行完一段时间后主动把资源释放给别人使用,而在内核态下则无须如此。因为操作系统可通过周期性的时钟中断把控制权夺过来。在用户态实现情况下,执行系统的调度器(runtime scheduler)也是线程,没有能力强行夺走控制权,所以必须合作。

用户态的优点:

灵活性。因为操作系统无须知道线程的存在,所以在任何操作系统上都能应用。

线程切换快。因为切换在用户态进行,无须陷入到内核态。

不用修改操作系统。

用户态的缺点:

编程序变得很诡异。由于用户态线程需要相互合作才能运转,所以,我们在写程序时,必须仔细斟酌在什么时候应该让出CPU给别的线程使用。而让出时机的选择对线程的效率和可靠性由很大的影响。

用户态线程实现无法完全达到线程提出所要达到的目的:进程级多道编程。

 

7.4 现代操作系统的线程实现模型

7.5 多线程的关系

7.6 讨论:从用户态进入内核态

7.7 讨论:线程的困惑——确定性与非确定性

思考题(面试题)

1、进程和线程的区别

2、用户态和内核态区别

3、用户态和核心态区别

posted @ 2020-03-31 16:31  揽月2020  阅读(142)  评论(0编辑  收藏  举报