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