完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>
標(biāo)簽 > 多線程
多線程(英語:multithreading),是指從軟件或者硬件上實(shí)現(xiàn)多個(gè)線程并發(fā)執(zhí)行的技術(shù)。具有多線程能力的計(jì)算機(jī)因有硬件支持而能夠在同一時(shí)間執(zhí)行多于一個(gè)線程,進(jìn)而提升整體處理性能。
多線程(英語:multithreading),是指從軟件或者硬件上實(shí)現(xiàn)多個(gè)線程并發(fā)執(zhí)行的技術(shù)。具有多線程能力的計(jì)算機(jī)因有硬件支持而能夠在同一時(shí)間執(zhí)行多于一個(gè)線程,進(jìn)而提升整體處理性能。具有這種能力的系統(tǒng)包括對(duì)稱多處理機(jī)、多核心處理器以及芯片級(jí)多處理(Chip-level multithreading)或同時(shí)多線程(Simultaneous multithreading)處理器。在一個(gè)程序中,這些獨(dú)立運(yùn)行的程序片段叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理(Multithreading)”。具有多線程能力的計(jì)算機(jī)因有硬件支持而能夠在同一時(shí)間執(zhí)行多于一個(gè)線程(臺(tái)灣譯作“執(zhí)行緒”),進(jìn)而提升整體處理性能。
多線程(英語:multithreading),是指從軟件或者硬件上實(shí)現(xiàn)多個(gè)線程并發(fā)執(zhí)行的技術(shù)。具有多線程能力的計(jì)算機(jī)因有硬件支持而能夠在同一時(shí)間執(zhí)行多于一個(gè)線程,進(jìn)而提升整體處理性能。具有這種能力的系統(tǒng)包括對(duì)稱多處理機(jī)、多核心處理器以及芯片級(jí)多處理(Chip-level multithreading)或同時(shí)多線程(Simultaneous multithreading)處理器。在一個(gè)程序中,這些獨(dú)立運(yùn)行的程序片段叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理(Multithreading)”。具有多線程能力的計(jì)算機(jī)因有硬件支持而能夠在同一時(shí)間執(zhí)行多于一個(gè)線程(臺(tái)灣譯作“執(zhí)行緒”),進(jìn)而提升整體處理性能。
硬件支持
多線程硬件支持的目標(biāo),即支持快速進(jìn)行就緒態(tài)線程、執(zhí)行態(tài)線程間的切換。為達(dá)成這個(gè)目標(biāo),需要硬件實(shí)現(xiàn)保存、恢復(fù)程序看得見的寄存器以及一些對(duì)程序執(zhí)行有影響的控制寄存器(如程序計(jì)數(shù)器PC、程序狀態(tài)寄存器SR)。從一個(gè)線程切換到另一個(gè)線程對(duì)硬件來講意味著保存當(dāng)前線程的一組寄存器的值,并恢復(fù)即將執(zhí)行線程的一組寄存器的值。
新增這些功能的硬件有以下優(yōu)勢(shì):
線程切換能夠在一個(gè) CPU 周期內(nèi)完成(有些硬件甚至沒有開銷,上個(gè)周期在運(yùn)行線程A,下個(gè)周期就已在運(yùn)行線程B)。
每個(gè)線程看起來就像是獨(dú)自運(yùn)行的,即沒有與其他線程共享硬件資源。對(duì)操作系統(tǒng)來說,通常每個(gè)線程都被視做獨(dú)占一個(gè)處理器,這樣將簡(jiǎn)化系統(tǒng)軟件的設(shè)計(jì)(尤其是對(duì)于支持多線程的操作系統(tǒng))。
為了在各個(gè)線程間有效率的進(jìn)行切換,每個(gè)線程需要保存自己的一組寄存器集(register set)。有些硬件設(shè)計(jì)成每個(gè)處理器核心具有兩組寄存器文件,以實(shí)現(xiàn)在多個(gè)線程間快速切換。
多線程有什么用?
這么解釋問題吧:
1。單進(jìn)程單線程:一個(gè)人在一個(gè)桌子上吃菜。
2。單進(jìn)程多線程:多個(gè)人在同一個(gè)桌子上一起吃菜。
3。多進(jìn)程單線程:多個(gè)人每個(gè)人在自己的桌子上吃菜。
多線程的問題是多個(gè)人同時(shí)吃一道菜的時(shí)候容易發(fā)生爭(zhēng)搶,例如兩個(gè)人同時(shí)夾一個(gè)菜,一個(gè)人剛伸出筷子,結(jié)果伸到的時(shí)候已經(jīng)被夾走菜了。。。此時(shí)就必須等一個(gè)人夾一口之后,在還給另外一個(gè)人夾菜,也就是說資源共享就會(huì)發(fā)生沖突爭(zhēng)搶。
1。對(duì)于 Windows 系統(tǒng)來說,【開桌子】的開銷很大,因此 Windows 鼓勵(lì)大家在一個(gè)桌子上吃菜。因此 Windows 多線程學(xué)習(xí)重點(diǎn)是要大量面對(duì)資源爭(zhēng)搶與同步方面的問題。
2。對(duì)于 Linux 系統(tǒng)來說,【開桌子】的開銷很小,因此 Linux 鼓勵(lì)大家盡量每個(gè)人都開自己的桌子吃菜。這帶來新的問題是:坐在兩張不同的桌子上,說話不方便。因此,Linux 下的學(xué)習(xí)重點(diǎn)大家要學(xué)習(xí)進(jìn)程間通訊的方法。
--
補(bǔ)充:有人對(duì)這個(gè)開桌子的開銷很有興趣。我把這個(gè)問題推廣說開一下。
開桌子的意思是指創(chuàng)建進(jìn)程。開銷這里主要指的是時(shí)間開銷。
可以做個(gè)實(shí)驗(yàn):創(chuàng)建一個(gè)進(jìn)程,在進(jìn)程中往內(nèi)存寫若干數(shù)據(jù),然后讀出該數(shù)據(jù),然后退出。此過程重復(fù) 1000 次,相當(dāng)于創(chuàng)建/銷毀進(jìn)程 1000 次。在我機(jī)器上的測(cè)試結(jié)果是:
UbuntuLinux:耗時(shí) 0.8 秒
Windows7:耗時(shí) 79.8 秒
兩者開銷大約相差一百倍。
這意味著,在 Windows 中,進(jìn)程創(chuàng)建的開銷不容忽視。換句話說就是,Windows 編程中不建議你創(chuàng)建進(jìn)程,如果你的程序架構(gòu)需要大量創(chuàng)建進(jìn)程,那么最好是切換到 Linux 系統(tǒng)。
大量創(chuàng)建進(jìn)程的典型例子有兩個(gè),一個(gè)是 gnu autotools 工具鏈,用于編譯很多開源代碼的,他們?cè)?Windows 下編譯速度會(huì)很慢,因此軟件開發(fā)人員最好是避免使用 Windows。另一個(gè)是服務(wù)器,某些服務(wù)器框架依靠大量創(chuàng)建進(jìn)程來干活,甚至是對(duì)每個(gè)用戶請(qǐng)求就創(chuàng)建一個(gè)進(jìn)程,這些服務(wù)器在 Windows 下運(yùn)行的效率就會(huì)很差。這“可能”也是放眼全世界范圍,Linux 服務(wù)器遠(yuǎn)遠(yuǎn)多于 Windows 服務(wù)器的原因。
--
再次補(bǔ)充:如果你是寫服務(wù)器端應(yīng)用的,其實(shí)在現(xiàn)在的網(wǎng)絡(luò)服務(wù)模型下,開桌子的開銷是可以忽略不計(jì)的,因?yàn)楝F(xiàn)在一般流行的是按照 CPU 核心數(shù)量開進(jìn)程或者線程,開完之后在數(shù)量上一直保持,進(jìn)程與線程內(nèi)部使用協(xié)程或者異步通信來處理多個(gè)并發(fā)連接,因而開進(jìn)程與開線程的開銷可以忽略了。
另外一種新的開銷被提上日程:核心切換開銷。
現(xiàn)代的體系,一般 CPU 會(huì)有多個(gè)核心,而多個(gè)核心可以同時(shí)運(yùn)行多個(gè)不同的線程或者進(jìn)程。
當(dāng)每個(gè) CPU 核心運(yùn)行一個(gè)進(jìn)程的時(shí)候,由于每個(gè)進(jìn)程的資源都獨(dú)立,所以 CPU 核心之間切換的時(shí)候無需考慮上下文。
當(dāng)每個(gè) CPU 核心運(yùn)行一個(gè)線程的時(shí)候,由于每個(gè)線程需要共享資源,所以這些資源必須從 CPU 的一個(gè)核心被復(fù)制到另外一個(gè)核心,才能繼續(xù)運(yùn)算,這占用了額外的開銷。換句話說,在 CPU 為多核的情況下,多線程在性能上不如多進(jìn)程。
因而,當(dāng)前面向多核的服務(wù)器端編程中,需要習(xí)慣多進(jìn)程而非多線程。
作者:京東科技 文濤 全文較長(zhǎng)共6468字,語言通俗易懂,是一篇具有大綱性質(zhì)的關(guān)于多線程的梳理,作者從歷史演進(jìn)的角度講了多線程相關(guān)知識(shí)體系,讓你知其然知...
使用線程可以把占據(jù)長(zhǎng)時(shí)間的程序中的任務(wù)放到后臺(tái)去處理。
自旋鎖和互斥鎖是兩種常見的同步機(jī)制,用于在多線程程序中保護(hù)共享資源。它們的主要區(qū)別在于等待鎖的方式和適用場(chǎng)景。 自旋鎖 自旋鎖(Spinlock)是一種...
2024-07-10 標(biāo)簽:cpu操作系統(tǒng)多線程 545 0
鴻蒙OS開發(fā)實(shí)例:【ArkTS類庫多線程@Concurrent裝飾器校驗(yàn)并發(fā)函數(shù)】
在使用TaskPool時(shí),執(zhí)行的并發(fā)函數(shù)需要使用該裝飾器修飾,否則無法通過相關(guān)校驗(yàn)。從API version 9開始,該裝飾器支持在ArkTS卡片中使用。
鴻蒙OS開發(fā)實(shí)例:【ArkTS類庫多線程CPU密集型任務(wù)TaskPool】
CPU密集型任務(wù)是指需要占用系統(tǒng)資源處理大量計(jì)算能力的任務(wù),需要長(zhǎng)時(shí)間運(yùn)行,這段時(shí)間會(huì)阻塞線程其它事件的處理,不適宜放在主線程進(jìn)行。例如圖像處理、視頻編...
鴻蒙OS開發(fā)案例:【ArkTS類庫多線程CPU密集型任務(wù)Worker】
通過某地區(qū)提供的房?jī)r(jià)數(shù)據(jù)訓(xùn)練一個(gè)簡(jiǎn)易的房?jī)r(jià)預(yù)測(cè)模型,該模型支持通過輸入房屋面積和房間數(shù)量去預(yù)測(cè)該區(qū)域的房?jī)r(jià),模型需要長(zhǎng)時(shí)間運(yùn)行,房?jī)r(jià)預(yù)測(cè)需要使用前面的模...
鴻蒙OS開發(fā)實(shí)例:【ArkTS類庫多線程I/O密集型任務(wù)開發(fā)】
使用異步并發(fā)可以解決單次I/O任務(wù)阻塞的問題,但是如果遇到I/O密集型任務(wù),同樣會(huì)阻塞線程中其它任務(wù)的執(zhí)行,這時(shí)需要使用多線程并發(fā)能力來進(jìn)行解決。 ...
神經(jīng)網(wǎng)絡(luò)能加速的有很多,當(dāng)然使用硬件加速是最可觀的了,而目前除了專用的NPU(神經(jīng)網(wǎng)絡(luò)加速單元),就屬于GPU對(duì)神經(jīng)網(wǎng)絡(luò)加速效果最好了
2024-03-05 標(biāo)簽:神經(jīng)網(wǎng)絡(luò)gpusram 799 0
使用 RISC-V 進(jìn)行高效數(shù)據(jù)處理的方法
使用RISC-V進(jìn)行高效數(shù)據(jù)處理的方法涉及多個(gè)方面,包括處理器內(nèi)核與DSA(領(lǐng)域特定加速器)之間的通信優(yōu)化、內(nèi)存管理優(yōu)化、多線程性能提升等。以下是一些具...
2024-12-11 標(biāo)簽:通信多線程數(shù)據(jù)處理 356 0
? 在數(shù)字時(shí)代,算力,在加速千行百業(yè)的發(fā)展中成為了生產(chǎn)力的源泉。AMD秉承一路創(chuàng)新的精神,一直關(guān)注客戶所需,專注于打造業(yè)內(nèi)一流的數(shù)據(jù)中心處理器,為眾多行...
2024-06-29 標(biāo)簽:處理器amd數(shù)據(jù)中心 1481 0
從多線程設(shè)計(jì)模式到對(duì) CompletableFuture 的應(yīng)用
最近在開發(fā) 延保服務(wù) 頻道頁時(shí),為了提高查詢效率,使用到了多線程技術(shù)。為了對(duì)多線程方案設(shè)計(jì)有更加充分的了解,在業(yè)余時(shí)間讀完了《圖解 Java 多線程設(shè)計(jì)...
驍龍8s Gen 3:全方位升級(jí)的旗艦級(jí)平臺(tái)
CPU 性能方面,第三代驍龍 8s 平臺(tái)搭載高通 Kryo CPU,沿襲全新 CPU 架構(gòu),包括 1 個(gè) 3.0GHz 的超級(jí)內(nèi)核、4 個(gè) 2.8GHz...
Java實(shí)現(xiàn)多線程的幾種方式 多線程是指程序中包含了兩個(gè)或以上的線程,每個(gè)線程都可以并行執(zhí)行不同的任務(wù)或操作。Java中的多線程可以提高程序的效率和性能...
你還是分不清多進(jìn)程和多線程嗎?一文搞懂! 多進(jìn)程和多線程是并發(fā)編程中常見的兩個(gè)概念,它們都可以用于提高程序的性能和效率。但是它們的實(shí)現(xiàn)方式和使用場(chǎng)景略有...
這表明在IPC性能方面,龍芯3A6000處理器超出了i3-10100F至少30%以上,差不多可以媲美13代酷睿處理器。
天璣7200和天璣1100哪個(gè)好?天璣7200和天璣8200哪個(gè)好?
天璣7200和天璣1100哪個(gè)好? 天璣7200好一些。聯(lián)發(fā)科天璣 7200 采用第二代臺(tái)積電 4 納米工藝,與天璣 9200 系列相同。配備了兩個(gè)峰值...
可以發(fā)現(xiàn)子線程組執(zhí)行時(shí),有一個(gè)線程執(zhí)行失敗,其他線程也會(huì)拋出異常,但是主線程中執(zhí)行的刪除操作,沒有回滾,@Transactional注解沒有生效。
$ python3 PmWebDirScan.py -u "baidu.com" -d "專業(yè)備份掃描.txt,綜合目錄....
編輯推薦廠商產(chǎn)品技術(shù)軟件/工具OS/語言教程專題
電機(jī)控制 | DSP | 氮化鎵 | 功率放大器 | ChatGPT | 自動(dòng)駕駛 | TI | 瑞薩電子 |
BLDC | PLC | 碳化硅 | 二極管 | OpenAI | 元宇宙 | 安森美 | ADI |
無刷電機(jī) | FOC | IGBT | 逆變器 | 文心一言 | 5G | 英飛凌 | 羅姆 |
直流電機(jī) | PID | MOSFET | 傳感器 | 人工智能 | 物聯(lián)網(wǎng) | NXP | 賽靈思 |
步進(jìn)電機(jī) | SPWM | 充電樁 | IPM | 機(jī)器視覺 | 無人機(jī) | 三菱電機(jī) | ST |
伺服電機(jī) | SVPWM | 光伏發(fā)電 | UPS | AR | 智能電網(wǎng) | 國民技術(shù) | Microchip |
Arduino | BeagleBone | 樹莓派 | STM32 | MSP430 | EFM32 | ARM mbed | EDA |
示波器 | LPC | imx8 | PSoC | Altium Designer | Allegro | Mentor | Pads |
OrCAD | Cadence | AutoCAD | 華秋DFM | Keil | MATLAB | MPLAB | Quartus |
C++ | Java | Python | JavaScript | node.js | RISC-V | verilog | Tensorflow |
Android | iOS | linux | RTOS | FreeRTOS | LiteOS | RT-THread | uCOS |
DuerOS | Brillo | Windows11 | HarmonyOS |