原文链接:www.geeksforgeeks.org/why-must-us…

原文作者:jamesnit730

基础知识介绍

  • 线程:线程是计算机体系中运用 CPU 的最小单位。

  • 进程:大多数状况下,咱们以为进程是运用 CPU 的基本单位,但一个进程或许进一步分为多个履行线程。一个进程能够分为不同的使命或单元,这些使命或单元能够独立履行,这些单元称为线程。(注:有些进程自身就是一个线程)。

  • 多线程:由单个进程创立多个线程是非常重要的工作,由于有时单个线程或许有快速且长期的I/O突发脉冲,在该突发脉冲被处理之前,与该I/O突发脉冲无关的其他使命有必要被暂停;另外一种状况是或许需求并行履行 2 个或更多使命,而且只有一个并行线程履行完成。

  • 例如:文字处理器程序等候用户的输入,该程序在等候输入或接受输入时,它会履行一些其他使命,如:拼写检查、将输出打印到屏幕等。

线程类型

在计算机体系中创立的线程能够是两种类型中的任何一种。

  1. 用户线程
  2. 内核线程

线程能够在进程自身的地址空间中创立,即在没有内核干涉的状况下在进程内部创立,也能够在内核干涉下创立。

用户线程

用户线程是由用户在用户库的协助下创立的线程,只对创立进程和它的运转环境可见(内核不知道这些线程的创立)。用户线程只是停留在创立进程的地址空间中,由创立进程运转和管理,没有内核的干涉,也就是说,这些线程的履行出现的任何问题都不是内核的问题。

内核线程

另一方面,内核线程是由内核创立的,对它来说是可见的。一个用户进程在所供给的库的协助下,要求内核为该进程创立一个可履行的线程,而内核则代表该进程创立该线程,并将其放在现有的可履行线程列表中。在这个进程中,线程的创立、履行和管理是由内核负责的。

现在,从线程的定义开端,是时候回答这个问题了 “为什么咱们需求将这些用户线程映射到内核线程?”由于它们之间唯一不同的是谁操控这些线程的履行,内核还是创立进程?为了了解这一点,咱们需求看一下下面的图表。

为什么用户线程必须映射到内核线程

首先,咱们要弄清楚这张图的意思。图的最上层显示了3个盒子,代表内存中的3个不同的进程,第一个进程在它的地址空间中有3个用户线程,第二个进程有2个,以此类推。图的第二层显示的是内核,每个用户级进程都被映射到内核空间(为什么?咱们等会就知道了)中的一个内核线程,这是用箭头指定的,在底层咱们有CPU。

注意

我在这里运用多对一的模型来解释映射进程,但也有其他的模型可用于映射。关于线程的映射模型的更多信息,请参阅这篇文章。

经过CPU调度器对线程进行排程

现在假定内部体系的结构就像上图所示的那样。那么此刻,内核中的CPU调度器将线程组织到CPU上履行。

但这里的问题是,作为内核的一部分,调度器只知道内核级的线程,由于如前所述,内核不知道用户线程的存在,由于它们是在创立进程的地址空间中创立的,因而内核对它们没有操控权。

内核中的CPU调度程序只是在其拥有的线程 “列表 “中检查可供履行的线程列表,并开端调度它们。

用户线程的映射

可是用户线程会怎么样呢?如前所述,内存中的每个进程都是一个 “内核线程”,这意味着该进程也在内核的线程列表中。因而,这意味着内核将用户进程映射到其中一个内核线程中去履行它。

一个进程所创立的一切用户线程都在指定给整个进程的同一个内核级线程上履行。每当轮到指定的进程在CPU上履行时,它的内核线程就会被组织到CPU上,从而履行该进程。

由于一切的线程都是由创立进程自身操控的,用户线程将被逐个映射到指定的内核线程上,从而被履行。

咱们能够把这整个进程看作是发明一个巨大的新产品,也许是一个电子小工具或其他东西。如果该产品要出售,它有必要以一个品牌称号出售,该品牌或公司需求向政府注册,而且该公司有必要遵循政府规矩的规矩和法令,经过市场上的商店出售所需产品。在这里,用户线程是产品,内核是政府,流程是公司,商店是内核线程。

总结

因而,简而言之,用户线程需求被映射到内核线程,由于是内核将线程组织到CPU上履行,为此它有必要知道它所组织的线程。对于一个简单的进程来说,内核只知道这个进程的存在,而不知道在这个进程中创立的用户线程,所以内核只会把这个进程的线程组织到CPU上,一切在这个进程中的其他用户线程如果要被履行,就有必要一个一个地映射到指定给创立进程的内核线程。

本文正在参加「金石方案 . 分割6万现金大奖」