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