RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

講講線程、進(jìn)程和CPU中的超線程

冬至配餃子 ? 來源:天奇工作室 ? 作者:LRC ? 2022-08-05 16:38 ? 次閱讀

我們先來回顧一下之前的內(nèi)容。CPU其實(shí)就是執(zhí)行指令的器件,指令從哪讀取要看PC寄存器,取得的指令需要翻譯成電路的控制信號,最后輸出一條指令的結(jié)果,這個結(jié)果可能會對下一條指令產(chǎn)生影響,也可能會對內(nèi)存或地址空間中的某個值產(chǎn)生影響。

今天我們來講講線程、進(jìn)程和CPU中的超線程。

我們通過不計(jì)其數(shù)的指令的組合,可以形成一個完整的線程。線程之間通過少量的必要的溝通組合形成一個進(jìn)程,也就是我們通常意義上的應(yīng)用程序。比如說音樂播放器中,音樂的播放是一個線程,用戶的操作界面是另外一個線程,兩個線程合起來構(gòu)成了音樂播放器。當(dāng)然,一個應(yīng)用程序(進(jìn)程)也可以只有一個線程。

早期的計(jì)算機(jī)不像現(xiàn)在如此發(fā)達(dá),一般一臺計(jì)算機(jī)一段時間內(nèi)只運(yùn)行一個線程,比如說計(jì)算導(dǎo)彈軌跡什么的,在計(jì)算完成后輸出結(jié)果,線程結(jié)束。然而時代在改變,在寫這段文字的時候,我的平板一邊打開著wps,一邊播放著音樂。這兩個進(jìn)程的運(yùn)行是連續(xù)的、同時的。

為什么會連續(xù)、同時呢?

首先,當(dāng)今的CPU的核心數(shù)早已不是單核心,一個非超線程(一會會講)的核心可以運(yùn)行一個線程,現(xiàn)在的八核CPU就可以同時運(yùn)行八個線程。但是這樣夠嗎?我們現(xiàn)在的電腦同一時刻需要運(yùn)行的線程可遠(yuǎn)不止八個。那看來光有核心數(shù)還不夠,我們還需要別的辦法。

第二個辦法便是分時間片。CPU運(yùn)算速度極快,我們能不能讓CPU在這一些線程上反復(fù)橫跳,快速切換并輪流執(zhí)行這些個線程,營造出一種這些線程是同時進(jìn)行的錯覺。具體怎么操作呢?可以設(shè)置一個“鬧鐘”,當(dāng)?shù)褂?jì)時結(jié)束的時候強(qiáng)行停止CPU當(dāng)前的線程(中斷),PC寄存器跳轉(zhuǎn)到相應(yīng)的地址,將當(dāng)前未處理完的線程的PC值、寄存器組數(shù)據(jù)等信息用一種數(shù)據(jù)類型保存到內(nèi)存中,CPU將根據(jù)操作系統(tǒng)給出的決定切換到接下來要運(yùn)行的下一個線程。CPU此時要將接下來要運(yùn)行的線程從內(nèi)存中讀取,恢復(fù)該線程到CPU內(nèi)核心中,就像它之前被切換出去時的樣子,然后開始執(zhí)行這個線程。(暫不細(xì)講)

第三個方法則是今天的主角--超線程技術(shù)。這個技術(shù)我沒記錯的話是Intel率先提出來的,他們聲稱增加5%的晶體管數(shù)量可以提升20%的性能。

具體怎么操作呢?首先我們先要考慮一下為什么一個核心只能同時運(yùn)行一個線程。

1.只有一個PC寄存器,只能指示一個線程目前運(yùn)行到哪了。

2.無法區(qū)分對寄存器組的操作。比如線程A要把第一個寄存器的值寫成0,B要讀出第一個寄存器的值,現(xiàn)在也就是0。但這個0是B想要的嗎?肯定不是。

3.還有一些涉及到線程的棧指針和頁表基地址的寄存器,也只能支撐一個線程的運(yùn)行。

因此,超線程簡單來講就是把這些不能公用的資源加倍。而那些流水線上的操作邏輯電路、ALU單元等則可以不用復(fù)制。以此實(shí)現(xiàn)多個線程同時在一個CPU的核心中進(jìn)行處理。注意,不一定一個核心只能虛擬出兩個線程,IBM的某款CPU甚至一個核心虛擬出了八個線程。

那為什么性能會提升呢?共用了這么多資源,性能應(yīng)該會有所下降才對。是的,有些時候性能確實(shí)會下滑,尤其是某個線程需要很大計(jì)算量的時候,因?yàn)楣灿?,可能會?dǎo)致該線程運(yùn)行速度減慢。那Intel是瞎吹他們的超線程技術(shù)嗎?并不是,往往CPU限制運(yùn)行速度的不是計(jì)算而是讀寫。讀寫要做的就是等待數(shù)據(jù)的傳輸,這個過程CPU沒事可做,只能空等。但有了超線程就不一樣了,CPU可以在本該空等的地方擇機(jī)執(zhí)行另外一個線程的指令,實(shí)現(xiàn)了時間管理,縮短了兩個程序執(zhí)行的總體時間。


審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5334

    瀏覽量

    120217
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10851

    瀏覽量

    211531
  • ALU
    ALU
    +關(guān)注

    關(guān)注

    0

    文章

    33

    瀏覽量

    13096
收藏 人收藏

    評論

    相關(guān)推薦

    socket 多線程編程實(shí)現(xiàn)方法

    是指在同一個進(jìn)程運(yùn)行多個線程,每個線程可以獨(dú)立執(zhí)行任務(wù)。線程共享進(jìn)程的資源,如內(nèi)存空間和文件句
    的頭像 發(fā)表于 11-12 14:16 ?333次閱讀

    Python線程和多進(jìn)程的區(qū)別

    Python作為一種高級編程語言,提供了多種并發(fā)編程的方式,其中多線程與多進(jìn)程是最常見的兩種方式之一。在本文中,我們將探討Python線程與多進(jìn)
    的頭像 發(fā)表于 10-23 11:48 ?384次閱讀
    Python<b class='flag-5'>中</b>多<b class='flag-5'>線程</b>和多<b class='flag-5'>進(jìn)程</b>的區(qū)別

    CPU線程和程序線程的區(qū)別

    CPU線程與程序的線程在概念、作用、實(shí)現(xiàn)方式以及性能影響等方面存在顯著差異。以下是對兩者區(qū)別的詳細(xì)闡述,旨在深入探討這一技術(shù)話題。
    的頭像 發(fā)表于 09-02 11:18 ?973次閱讀

    探索虛擬線程:原理與實(shí)現(xiàn)

    虛擬線程的引入與優(yōu)勢 在Loom項(xiàng)目之前,Java虛擬機(jī)(JVM)線程是通過java.lang.Thread類型來實(shí)現(xiàn)的,這些線程被稱為平臺線程
    的頭像 發(fā)表于 06-24 11:35 ?286次閱讀
    探索虛擬<b class='flag-5'>線程</b>:原理與實(shí)現(xiàn)

    一句話讓你理解線程進(jìn)程

    今天給大家分享一下線程進(jìn)程,主要包含以下幾部分內(nèi)容:一句話說明線程進(jìn)程操作系統(tǒng)為什么需要進(jìn)程為什么要引入
    的頭像 發(fā)表于 06-04 08:04 ?1156次閱讀
    一句話讓你理解<b class='flag-5'>線程</b>和<b class='flag-5'>進(jìn)程</b>

    鴻蒙OS開發(fā)實(shí)例:【ArkTS類庫多線程CPU密集型任務(wù)TaskPool】

    CPU密集型任務(wù)是指需要占用系統(tǒng)資源處理大量計(jì)算能力的任務(wù),需要長時間運(yùn)行,這段時間會阻塞線程其它事件的處理,不適宜放在主線程進(jìn)行。例如圖像處理、視頻編碼、數(shù)據(jù)分析等。 基于多線程
    的頭像 發(fā)表于 04-01 22:25 ?827次閱讀
    鴻蒙OS開發(fā)實(shí)例:【ArkTS類庫多<b class='flag-5'>線程</b><b class='flag-5'>CPU</b>密集型任務(wù)TaskPool】

    java實(shí)現(xiàn)多線程的幾種方式

    Java實(shí)現(xiàn)多線程的幾種方式 多線程是指程序包含了兩個或以上的線程,每個線程都可以并行執(zhí)行不同的任務(wù)或操作。Java
    的頭像 發(fā)表于 03-14 16:55 ?684次閱讀

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

    Intel將在今年晚些時候推出Arrow Lake、Lunar Lake兩套平臺,工藝、架構(gòu)基本相同,分別面向高性能和低功耗,一個意外變化就是不支持超線程。
    的頭像 發(fā)表于 03-12 15:03 ?1163次閱讀
    Intel超低功耗新U失去<b class='flag-5'>超線程</b>!但多核性能可提升幾乎1.5倍!

    python5種線程鎖盤點(diǎn)

    線程安全是多線程或多進(jìn)程編程的一個概念,在擁有共享數(shù)據(jù)的多條線程并行執(zhí)行的程序,
    發(fā)表于 03-07 11:08 ?1580次閱讀
    python<b class='flag-5'>中</b>5種<b class='flag-5'>線程</b>鎖盤點(diǎn)

    基于RTOS的應(yīng)用進(jìn)程的典型線程

    RTOS的關(guān)鍵因素是最小的中斷延遲和最小的線程切換延遲。RTOS的價值在于它的響應(yīng)速度或可預(yù)測性,而不是它在給定時間段內(nèi)可以執(zhí)行的工作量。
    發(fā)表于 03-05 09:32 ?589次閱讀
    基于RTOS的應(yīng)用<b class='flag-5'>進(jìn)程</b><b class='flag-5'>中</b>的典型<b class='flag-5'>線程</b>

    嵌入式系統(tǒng)線程、進(jìn)程與任務(wù)概念與區(qū)別

    每個線程與主程序共用地址空間,受限于2GB地址空間; 2)線程之間的同步和加鎖控制比較麻煩;一個線程的崩潰可能影響到整個程序的穩(wěn)定性
    發(fā)表于 03-04 15:03 ?1326次閱讀
    嵌入式系統(tǒng)<b class='flag-5'>中</b>的<b class='flag-5'>線程</b>、<b class='flag-5'>進(jìn)程</b>與任務(wù)概念與區(qū)別

    什么是動態(tài)線程池?動態(tài)線程池的簡單實(shí)現(xiàn)思路

    因此,動態(tài)可監(jiān)控線程池一種針對以上痛點(diǎn)開發(fā)的線程池管理工具。主要可實(shí)現(xiàn)功能有:提供對 Spring 應(yīng)用內(nèi)線程池實(shí)例的全局管控、應(yīng)用運(yùn)行時動態(tài)變更線程池參數(shù)以及
    的頭像 發(fā)表于 02-28 10:42 ?629次閱讀

    線程是什么的基本單位 進(jìn)程線程的本質(zhì)區(qū)別

    線程是操作系統(tǒng)處理器調(diào)度的基本單位,它代表著獨(dú)立的執(zhí)行流。在一個進(jìn)程,可以包含多個線程,這些線程
    的頭像 發(fā)表于 02-02 16:30 ?918次閱讀

    什么是守護(hù)線程?守護(hù)線程的底層原理和使用示例

    大家好,今天這篇文章來梳理一下有關(guān)守護(hù)線程的相關(guān)問題,這也是之前曾經(jīng)有被問到過的面試題,在此之前我們先看一看守護(hù)線程的使用示例。
    的頭像 發(fā)表于 01-05 11:01 ?1405次閱讀
    什么是守護(hù)<b class='flag-5'>線程</b>?守護(hù)<b class='flag-5'>線程</b>的底層原理和使用示例

    mcu線程進(jìn)程的區(qū)別是什么

    是程序執(zhí)行的基本單位,它是進(jìn)程的一個實(shí)體,是進(jìn)程內(nèi)的一條執(zhí)行路徑。線程CPU調(diào)度的最小單位,它可以看作是輕量級的
    的頭像 發(fā)表于 01-04 10:45 ?740次閱讀
    RM新时代网站-首页