针对“普通级(以上)厨师”的高级计算机概念: 术语第 2 部分

我当然知道什么是线程...难道我不知道吗?

了解什么是内核之后,我们要探讨另外一个令人困惑的概念。

我将在这部分通过一系列博客深入介绍一些计算机术语。 如果觉得乏味,我的美食家读者们,你们可以选择跳过或继续阅读。 在我看来,不管这部分有或没有,都不妨碍理解其他博客。 不过如果你们其中有人已对线程化有所了解,可以通过这部分内容获得更多洞察。

在了解比喻的核心内容前,我们首先了解一下什么是‘线程’。 计算机科学家了解并喜欢使用的一般意义上的线程,与内核中执行程序时所涉及的线程不同。 例如,超线程实际上并不是指一个内核能够执行程序派生的两条线程(比如 MyProgram.ThreadA 和 MyProgram.ThreadB)。 (超线程稍后再做详细介绍。) 不要误会,它们之间存在关联。 计算机架构师所说的线程主要是指“执行线程”,而非程序。 就硬件而言,不存在程序,只存在硬件执行的一系列指令,因此称为“执行线程”。

(在此我将“硬件线程”和“软件线程”分别简称为 “HW-thread” 和 “SW-thread”。)

我希望以下这些并不怎么专业插图能对大家有所帮助。

图 SWTHREAD 展示了 ProgramOne 派生的两条线程(ThreadA 和 ThreadB)以及与第二个程序 ProgramTwo 相对应的单条线程。

Image of software threads

图 SWTHREAD. 编程人员眼中通过超线程在单核处理器上运行的两个程序。 (IP 为指令指针,告诉计算机下一个待执行指令的寄存器。)

这种情况大家比较熟悉。 你拥有一个正在运行的程序和一个指令指针 (IP),该指针会指向下一个即将执行的指令。 仔细看的话,大家会发现有一些奇怪的东西与 IP 同时运行,有些人可能认为是印刷错误。 例如,现在有 3 个 IP,即使我们的硬件一次只能执行两条线程。 而且 IP 已偏移,而我们常常认为它们已排列整齐。 这是因为软件线程本身的 IP 地址与其执行的环境相关。在这种情况下,“环境”指操作系统环境,包括寄存器与其他涉及钝化和激活软件线程的组件。 (‘钝化’ 指使其进入睡眠状态。 ‘激活’指将其唤醒。) 这就意味着 IP 地址与各自的软件线程环境(而非实际的硬件)相关联。 因此,IP 地址与处理程序上执行的软件线程在数量上是相同的。

现在我们来看一下图 HWTHREAD1。 左上角为缩小版的图 SWTHREAD,便于我们比较硬件线程与软件线程之间的不同。 图 HWTHREAD1 展示了硬件如何执行软件线程。 你会发现,操作系统伺机在两条硬件线程之间分配了几段软件线程。 这正说明了软件线程与硬件线程之间的区别。 软件线程组成了编程人员希望并行执行的程序。 因此软件线程的数量可从1 条到数百条不等。 相比之下,硬件线程指处理单元执行一系列连续指令。 每个内核的硬件线程数量比较固定,尽管一些现代处理器配有可对线程数量稍作改变的转换器。 (超线程就是一种能够使一个内核同时执行两条线程的模式,这点我们稍后予以介绍。) 这些指令通常来自不同的软件线程环境(包括内核的环境)。 内核实际上通过保存一条软件线程的环境并上载另一种环境,以此来实现不同软件线程之间的切换。

image hardware-threading

图 HWTHREAD1. 将软件线程映射至硬件线程

噢,我知道你们在想什么: 这与我们的普通级(以上)厨师及其厨房有何关系? 如果厨师对其英特尔® Edison IoT(物联网)大堂或兼职的安卓* 烹饪应用公司传来的软件线程概念有所了解,这就有关系啦。 软件线程与硬件线程之间的区别可能只会令计算机编程人员感到困惑。

附录: 另一种将硬件线程映射至软件线程的方法

下面为希望对两者有所了解的读者提供一些补充信息。 图 SWTHREAD 显示了编程人员眼中的软件线程。 图 HWTHREAD1 显示了编程人员如何将软件线程映射至处理器的硬件线程。

图 HWTHREAD2 显示了处理器的硬件线程如何映射至软件线程(对比软件线程至硬件线程的映射)。 尽管两者之间的区别看似只是表述不同,但你可以发现,两者的区别非常显著。 图中在不同进程之间来回穿梭的蓝色波浪线为硬件线程。 别担心,我马上进行解释。 如果你对它感兴趣,请留言进行评论,我会非常高兴的。

image mapping threads

图 HWTHREAD2. 追踪穿梭于软件线程(以及操作系统)之间的硬件线程

接下来: 我们回到厨房这一比喻,并解释现代处理器的工作原理!

脚注:

+操作系统 (OS) 运行一些必须完成的任务,才能确保程序(比如电子表格)的正常运行。 试想一下管理者与支持人员所做的工作,他们不直接销售或制造产品,但却是确保企业平稳运行所不可或缺的。

同样,内核也是操作系统的核心,内核执行一些关键功能以确保其他程序平稳运行。 例如,如果管理人员减少,不会影响你的产品制造,但如果没有维持制造设备正常运转(但不涉及产品本身的制造)的人员,你可能就无能为力了。

standard
Для получения подробной информации о возможностях оптимизации компилятора обратитесь к нашему Уведомлению об оптимизации.
Возможность комментирования русскоязычного контента была отключена. Узнать подробнее.