0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

讲讲线程、进程和CPU中的超线程

冬至配饺子 来源:天奇工作室 作者:LRC 2022-08-05 16:38 次阅读

我们先来回顾一下之前的内容。CPU其实就是执行指令的器件,指令从哪读取要看PC寄存器,取得的指令需要翻译成电路的控制信号,最后输出一条指令的结果,这个结果可能会对下一条指令产生影响,也可能会对内存或地址空间中的某个值产生影响。

今天我们来讲讲线程、进程和CPU中的超线程。

我们通过不计其数的指令的组合,可以形成一个完整的线程。线程之间通过少量的必要的沟通组合形成一个进程,也就是我们通常意义上的应用程序。比如说音乐播放器中,音乐的播放是一个线程,用户的操作界面是另外一个线程,两个线程合起来构成了音乐播放器。当然,一个应用程序(进程)也可以只有一个线程。

早期的计算机不像现在如此发达,一般一台计算机一段时间内只运行一个线程,比如说计算导弹轨迹什么的,在计算完成后输出结果,线程结束。然而时代在改变,在写这段文字的时候,我的平板一边打开着wps,一边播放着音乐。这两个进程的运行是连续的、同时的。

为什么会连续、同时呢?

首先,当今的CPU的核心数早已不是单核心,一个非超线程(一会会讲)的核心可以运行一个线程,现在的八核CPU就可以同时运行八个线程。但是这样够吗?我们现在的电脑同一时刻需要运行的线程可远不止八个。那看来光有核心数还不够,我们还需要别的办法。

第二个办法便是分时间片。CPU运算速度极快,我们能不能让CPU在这一些线程上反复横跳,快速切换并轮流执行这些个线程,营造出一种这些线程是同时进行的错觉。具体怎么操作呢?可以设置一个“闹钟”,当倒计时结束的时候强行停止CPU当前的线程(中断),PC寄存器跳转到相应的地址,将当前未处理完的线程的PC值、寄存器组数据等信息用一种数据类型保存到内存中,CPU将根据操作系统给出的决定切换到接下来要运行的下一个线程。CPU此时要将接下来要运行的线程从内存中读取,恢复该线程到CPU内核心中,就像它之前被切换出去时的样子,然后开始执行这个线程。(暂不细讲)

第三个方法则是今天的主角--超线程技术。这个技术我没记错的话是Intel率先提出来的,他们声称增加5%的晶体管数量可以提升20%的性能。

具体怎么操作呢?首先我们先要考虑一下为什么一个核心只能同时运行一个线程。

1.只有一个PC寄存器,只能指示一个线程目前运行到哪了。

2.无法区分对寄存器组的操作。比如线程A要把第一个寄存器的值写成0,B要读出第一个寄存器的值,现在也就是0。但这个0是B想要的吗?肯定不是。

3.还有一些涉及到线程的栈指针和页表基地址的寄存器,也只能支撑一个线程的运行。

因此,超线程简单来讲就是把这些不能公用的资源加倍。而那些流水线上的操作逻辑电路、ALU单元等则可以不用复制。以此实现多个线程同时在一个CPU的核心中进行处理。注意,不一定一个核心只能虚拟出两个线程,IBM的某款CPU甚至一个核心虚拟出了八个线程。

那为什么性能会提升呢?共用了这么多资源,性能应该会有所下降才对。是的,有些时候性能确实会下滑,尤其是某个线程需要很大计算量的时候,因为共用,可能会导致该线程运行速度减慢。那Intel是瞎吹他们的超线程技术吗?并不是,往往CPU限制运行速度的不是计算而是读写。读写要做的就是等待数据的传输,这个过程CPU没事可做,只能空等。但有了超线程就不一样了,CPU可以在本该空等的地方择机执行另外一个线程的指令,实现了时间管理,缩短了两个程序执行的总体时间。


审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5336

    浏览量

    120230
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10854

    浏览量

    211574
  • ALU
    ALU
    +关注

    关注

    0

    文章

    33

    浏览量

    13096
收藏 人收藏

    评论

    相关推荐

    socket 多线程编程实现方法

    是指在同一个进程运行多个线程,每个线程可以独立执行任务。线程共享进程的资源,如内存空间和文件句
    的头像 发表于 11-12 14:16 339次阅读

    Python线程和多进程的区别

    Python作为一种高级编程语言,提供了多种并发编程的方式,其中多线程与多进程是最常见的两种方式之一。在本文中,我们将探讨Python线程与多
    的头像 发表于 10-23 11:48 392次阅读
    Python<b class='flag-5'>中</b>多<b class='flag-5'>线程</b>和多<b class='flag-5'>进程</b>的区别

    CPU线程和程序线程的区别

    CPU线程与程序的线程在概念、作用、实现方式以及性能影响等方面存在显著差异。以下是对两者区别的详细阐述,旨在深入探讨这一技术话题。
    的头像 发表于 09-02 11:18 977次阅读

    探索虚拟线程:原理与实现

    虚拟线程的引入与优势 在Loom项目之前,Java虚拟机(JVM)线程是通过java.lang.Thread类型来实现的,这些线程被称为平台线程
    的头像 发表于 06-24 11:35 287次阅读
    探索虚拟<b class='flag-5'>线程</b>:原理与实现

    一句话让你理解线程进程

    今天给大家分享一下线程进程,主要包含以下几部分内容:一句话说明线程进程操作系统为什么需要进程为什么要引入
    的头像 发表于 06-04 08:04 1172次阅读
    一句话让你理解<b class='flag-5'>线程</b>和<b class='flag-5'>进程</b>

    鸿蒙OS开发实例:【ArkTS类库多线程CPU密集型任务TaskPool】

    CPU密集型任务是指需要占用系统资源处理大量计算能力的任务,需要长时间运行,这段时间会阻塞线程其它事件的处理,不适宜放在主线程进行。例如图像处理、视频编码、数据分析等。 基于多线程
    的头像 发表于 04-01 22:25 829次阅读
    鸿蒙OS开发实例:【ArkTS类库多<b class='flag-5'>线程</b><b class='flag-5'>CPU</b>密集型任务TaskPool】

    java实现多线程的几种方式

    Java实现多线程的几种方式 多线程是指程序包含了两个或以上的线程,每个线程都可以并行执行不同的任务或操作。Java
    的头像 发表于 03-14 16:55 686次阅读

    Intel超低功耗新U失去超线程!但多核性能可提升几乎1.5倍!

    Intel将在今年晚些时候推出Arrow Lake、Lunar Lake两套平台,工艺、架构基本相同,分别面向高性能和低功耗,一个意外变化就是不支持超线程
    的头像 发表于 03-12 15:03 1167次阅读
    Intel超低功耗新U失去<b class='flag-5'>超线程</b>!但多核性能可提升几乎1.5倍!

    python5种线程锁盘点

    线程安全是多线程或多进程编程的一个概念,在拥有共享数据的多条线程并行执行的程序
    发表于 03-07 11:08 1581次阅读
    python<b class='flag-5'>中</b>5种<b class='flag-5'>线程</b>锁盘点

    基于RTOS的应用进程的典型线程

    RTOS的关键因素是最小的中断延迟和最小的线程切换延迟。RTOS的价值在于它的响应速度或可预测性,而不是它在给定时间段内可以执行的工作量。
    发表于 03-05 09:32 590次阅读
    基于RTOS的应用<b class='flag-5'>进程</b><b class='flag-5'>中</b>的典型<b class='flag-5'>线程</b>

    嵌入式系统线程进程与任务概念与区别

    每个线程与主程序共用地址空间,受限于2GB地址空间; 2)线程之间的同步和加锁控制比较麻烦;一个线程的崩溃可能影响到整个程序的稳定性
    发表于 03-04 15:03 1329次阅读
    嵌入式系统<b class='flag-5'>中</b>的<b class='flag-5'>线程</b>、<b class='flag-5'>进程</b>与任务概念与区别

    什么是动态线程池?动态线程池的简单实现思路

    因此,动态可监控线程池一种针对以上痛点开发的线程池管理工具。主要可实现功能有:提供对 Spring 应用内线程池实例的全局管控、应用运行时动态变更线程池参数以及
    的头像 发表于 02-28 10:42 637次阅读

    线程是什么的基本单位 进程线程的本质区别

    线程是操作系统处理器调度的基本单位,它代表着独立的执行流。在一个进程,可以包含多个线程,这些线程
    的头像 发表于 02-02 16:30 925次阅读

    什么是守护线程?守护线程的底层原理和使用示例

    大家好,今天这篇文章来梳理一下有关守护线程的相关问题,这也是之前曾经有被问到过的面试题,在此之前我们先看一看守护线程的使用示例。
    的头像 发表于 01-05 11:01 1408次阅读
    什么是守护<b class='flag-5'>线程</b>?守护<b class='flag-5'>线程</b>的底层原理和使用示例

    mcu线程进程的区别是什么

    是程序执行的基本单位,它是进程的一个实体,是进程内的一条执行路径。线程CPU调度的最小单位,它可以看作是轻量级的
    的头像 发表于 01-04 10:45 742次阅读