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

    文章

    5589

    浏览量

    129064
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11216

    浏览量

    222948
  • ALU
    ALU
    +关注

    关注

    0

    文章

    34

    浏览量

    13452
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux多线程对比单线程的优势

    在Linux系统线程是操作系统能够进行运算调度的最小单位。线程被包含在进程之中,是进程的实
    发表于 12-01 06:11

    rt-thread studio 如何进行多线程编译?

    ,使用的是5800h+32g内存+sn550 ssd,开启16线程编译时cpu的占用率也只能到30%,编译完整个工程需要3分钟 感觉多线程编译设置没有生效,有办法提高编译速度吗 rtthread studio版本是 2.2.9
    发表于 10-11 09:16

    rtt建两个线程a和b,怎么确保线程a执行完立刻切到线程b?

    怎么获取从线程开始切换到切换完成用的总的CPU时钟节拍数量?
    发表于 10-10 06:37

    tcpip线程被mu0锁住导致网络线程无法使用怎么解决?

    各位好,我使用rtthread开发STM32F407VGT6芯片,程序有多个线程,每个线程都会创建一个socket,建立tcp连接或者udp连接,现在出现一个问题,程序长时间运行有概率死机,但是没有
    发表于 09-29 06:41

    线程删除时遇到断言,是什么原因导致的?

    在一个线程调用线程删除函数删除另外一个线程,这2个线程的优先级是相等的,被删除的线程也是动态创
    发表于 09-12 06:08

    rtth studionano 如何创建动态线程

    有没有大佬,可以说一下为什么静态线程可以正常使用,动态线程怎么也使用不了。 具体需要什么配置才能使用动态线程创建。谢谢!
    发表于 09-11 06:01

    【HZ-T536开发板免费体验】—— linux创建线程

    线程进程 一个进程指的是一个正在执行的应用程序,而线程的功能是执行应用程序的某个具体任务。线程
    发表于 09-01 21:31

    rtt studionano 如何创建动态线程

    有没有大佬,可以说一下为什么静态线程可以正常使用,动态线程怎么也使用不了。 具体需要什么配置才能使用动态线程创建。谢谢!
    发表于 08-22 06:19

    UVC+MSC实现MSC线程未运行的原因?

    我正在尝试使用 EZUSB 运行 UVC + MSC。我有以下内容。但看起来只有 UVC 线程在运行,而 MSC 没有运行。fw 不响应 MSC 命令。我确保 LPM 已被禁用,只是为了检查传感器
    发表于 07-16 07:08

    深度剖析 RT-Thread 线程调度流程

    rt_system_scheduler_start:调度系统第一个线程rt_hw_context_switch_to:初始化上下文切换环境,触发PendSV异常first_thread:系统优先级最高
    的头像 发表于 06-25 18:24 1437次阅读
    深度剖析 RT-Thread <b class='flag-5'>线程</b>调度流程

    线程的安全注意事项

    线程安全是指多个线程同时访问或修改共享资源时,能够保证程序的正确性和可靠性。 开发者选择TaskPool或Worker进行多线程开发时,在TaskPool和Worker的工作线程中导
    发表于 06-20 07:49

    进程线程、协程傻傻分不清?一文带你彻底扒光它们的\"底裤\"!

    ;) ​ asyncio.run(main()) 输出结果: markdown 抓取完成!共 10 条数据 「三大门派」终极对比表(含「社死」现场) 特性 进程 线程 协程 资源开销 高(买房) (合租
    发表于 03-26 09:27

    请问如何在Python实现多线程与多进程的协作?

    () thread.join() process.join() 我的问题是:**如何合理地组合多线程和多进程以获得更好的性能?**特别是在I/O密集型任务和CPU密集型任务混合的情况下,如何避免性能瓶颈,确保程序的高效运行? 希
    发表于 03-11 06:57

    请问rt-thread studio如何进行多线程编译?

    ,使用的是5800h+32g内存+sn550 ssd,开启16线程编译时cpu的占用率也只能到30%,编译完整个工程需要3分钟 感觉多线程编译设置没有生效,有办法提高编译速度吗
    发表于 02-19 08:30

    华为云 X 实例 CPU 性能测试详解与优化策略

      2.2 Sysbench单线程CPU性能测试   2.3 Sysbench多线程CPU性能测试(4线程)   2.4 高强度多
    的头像 发表于 12-30 14:52 1182次阅读
    华为云 X 实例 <b class='flag-5'>CPU</b> 性能测试详解与优化策略