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可以在本该空等的地方择机执行另外一个线程的指令,实现了时间管理,缩短了两个程序执行的总体时间。


审核编辑:刘清

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

    关注

    30

    文章

    5027

    浏览量

    117710
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10436

    浏览量

    206524
  • ALU
    ALU
    +关注

    关注

    0

    文章

    32

    浏览量

    12999
收藏 人收藏

    评论

    相关推荐

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

    线程是操作系统中处理器调度的基本单位,它代表着独立的执行流。在一个进程中,可以包含多个线程,这些线程共享相同的进程资源,如内存空间、文件描述
    的头像 发表于 02-02 16:30 327次阅读

    mcu线程进程的区别是什么

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

    进程线程的概念及其区别

    今天浩道跟大家分享一篇关于进程线程之间关联的硬核干货,看看大神如何通过通俗易懂的图文,让大家更加深刻理解进程线程的区别!
    的头像 发表于 11-21 10:50 565次阅读
    <b class='flag-5'>进程</b>和<b class='flag-5'>线程</b>的概念及其区别

    RTOS中的线程进程和协程详解

    看到有小伙伴在讨论【RTOS任务属于线程还是进程】的话题,这里就来分析一下OS中的线程进程和协程的这几个概念,同时一起看看RTOS中的任务到底属于哪一种。
    的头像 发表于 11-09 12:36 972次阅读
    RTOS中的<b class='flag-5'>线程</b>、<b class='flag-5'>进程</b>和协程详解

    关于Python多进程和多线程详解

    进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。关于多进程和多线程,教科书上最经典的一句话是“进程
    的头像 发表于 11-06 14:46 305次阅读
    关于Python多<b class='flag-5'>进程</b>和多<b class='flag-5'>线程</b>详解

    一个有许多线程进程,如何才能改变其中一个线程的工作目录?

    一个有许多线程进程,我们如何才能改变其中一个线程的工作目录,而不影响其他?
    发表于 10-17 09:01

    华为麒麟9000s超线程手机芯片是真的 超线程和不超线程区别大吗

    在B站上的多位博主已经证实,华为Mate60系列搭载的麒麟9000S为8核12线程,这意味着该芯片拥有超线程技术。尽管对于该芯片的制造工艺和内核结构方面还存在一些不确定性的消息,但视频证实了华为手机芯片首次支持超线程
    的头像 发表于 09-04 11:44 4249次阅读

    华为麒麟9000S被证实是首款超线程手机芯片

     超线程技术是将多线程处理器内部的两个逻辑内核模拟为两个物理芯片,使单一处理器能够使用线程级别的并行计算,从而与多线程操作系统和软件兼容。超线程
    的头像 发表于 09-04 10:14 1602次阅读

    实锤!华为麒麟9000s首款超线程手机处理器

    最新数码圈的一些博主对该处理器进行了一些更深度的测试和针对性的适配验证,确定麒麟 9000s 为 8 核 12 线程,并采用了超线程设计。
    的头像 发表于 09-03 14:44 1848次阅读
    实锤!华为麒麟9000s首款<b class='flag-5'>超线程</b>手机处理器

    超线程是什么意思?

    超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算。 超线程(HT, Hyper-Threading)是英特尔研发的一种技术,于2002年发布。通过
    的头像 发表于 09-01 19:28 1w次阅读

    华为麒麟9000S处理器为8核12线程 手机端SoC首次引入超线程技术

    两位B站博主已证实华为Mate60系列搭载的麒麟9000S处理器具备8核12线程超线程功能,这应该是第一款支持手机超线程技术的处理器。
    的头像 发表于 09-01 17:20 1963次阅读

    华为麒麟9000S处理器为8核12线程 首款支持超线程手机处理器

    逻辑内核模拟成两个物理芯片,让单个处理器就能使用线程级的并行计算,进而兼容多线程操作系统和软件。超线程技术可以充分利用空闲CPU资源,在相同时间内完成更多工作。
    的头像 发表于 09-01 16:32 9348次阅读

    进程线程的区别以及优缺点

    进程线程 1、什么是进程线程,有什么区别? 进程是资源(CPU、内存等)分配的基本单位,
    的头像 发表于 07-21 11:02 841次阅读

    程序中进程线程的区别

    什么是进程 1、进程线程的区别 进程是指正在运行的程序,它拥有独立的内存空间和系统资源,不同进程之间的数据不共享。
    的头像 发表于 06-22 11:39 305次阅读
    程序中<b class='flag-5'>进程</b>和<b class='flag-5'>线程</b>的区别

    进程线程的区别

    每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程
    的头像 发表于 05-09 11:06 3452次阅读
    <b class='flag-5'>进程</b>和<b class='flag-5'>线程</b>的区别