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其實就是執(zhí)行指令的器件,指令從哪讀取要看PC寄存器,取得的指令需要翻譯成電路的控制信號,最后輸出一條指令的結(jié)果,這個結(jié)果可能會對下一條指令產(chǎn)生影響,也可能會對內(nèi)存或地址空間中的某個值產(chǎn)生影響。

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

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

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

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

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

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

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

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

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

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

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

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

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


審核編輯:劉清

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

    關(guān)注

    31

    文章

    5294

    瀏覽量

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

    關(guān)注

    68

    文章

    10804

    瀏覽量

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

    關(guān)注

    0

    文章

    33

    瀏覽量

    13070
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

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

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

    python5種線程鎖盤點

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

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

    RTOS的關(guān)鍵因素是最小的中斷延遲和最小的線程切換延遲。RTOS的價值在于它的響應(yīng)速度或可預(yù)測性,而不是它在給定時間段內(nèi)可以執(zhí)行的工作量。
    發(fā)表于 03-05 09:32 ?498次閱讀
    基于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 ?1068次閱讀
    嵌入式系統(tǒng)<b class='flag-5'>中</b>的<b class='flag-5'>線程</b>、<b class='flag-5'>進(jìn)程</b>與任務(wù)概念與區(qū)別

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

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

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

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

    redis多線程還能保證線程安全嗎

    Redis是一種使用C語言編寫的高性能鍵值存儲系統(tǒng),它是單線程的,因為使用了多路復(fù)用的方式來處理并發(fā)請求。這樣的實現(xiàn)方式帶來了很好的性能,但同時也引發(fā)了一些線程安全方面的問題。 在Redis,由于
    的頭像 發(fā)表于 12-05 10:28 ?1628次閱讀

    核心線程數(shù)和最大線程數(shù)怎么設(shè)置

    核心線程數(shù)和最大線程數(shù)是Java線程池中重要的參數(shù),用來控制線程池中線程的數(shù)量和行為。正確地設(shè)置這兩個參數(shù)可以優(yōu)化系統(tǒng)的性能和資源利用率。本
    的頭像 發(fā)表于 12-01 13:50 ?8492次閱讀

    進(jìn)程線程的概念及其區(qū)別

    今天浩道跟大家分享一篇關(guān)于進(jìn)程線程之間關(guān)聯(lián)的硬核干貨,看看大神如何通過通俗易懂的圖文,讓大家更加深刻理解進(jìn)程線程的區(qū)別!
    的頭像 發(fā)表于 11-21 10:50 ?856次閱讀
    <b class='flag-5'>進(jìn)程</b>和<b class='flag-5'>線程</b>的概念及其區(qū)別

    JDK如何優(yōu)雅退出一個線程?

    需要線程退出的常見場景 任務(wù)執(zhí)行完成,或異常終止,任務(wù)認(rèn)為無需再占用線程。 線程池根據(jù)當(dāng)前任務(wù)執(zhí)行情況,伸縮線程池。當(dāng)任務(wù)執(zhí)行較少時,退出空閑的
    的頭像 發(fā)表于 11-17 10:02 ?409次閱讀
    JDK如何優(yōu)雅退出一個<b class='flag-5'>線程</b>?

    如何查看一個線程的ID

    1.什么是線程? linux內(nèi)核是沒有線程這個概念的,而是輕量級進(jìn)程的概念:LWP。一般我們所說的線程概念是C庫當(dāng)中的概念。 1.1
    的頭像 發(fā)表于 11-13 14:38 ?1254次閱讀
    如何查看一個<b class='flag-5'>線程</b>的ID

    如何用C語言實現(xiàn)線程

    線程池是一種多線程處理形式,大多用于高并發(fā)服務(wù)器上,它能合理有效的利用高并發(fā)服務(wù)器上的線程資源;線程進(jìn)程用于處理各項分支子功能,我們通常的
    的頭像 發(fā)表于 11-13 10:41 ?980次閱讀
    如何用C語言實現(xiàn)<b class='flag-5'>線程</b>池