完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>
標(biāo)簽 > 多線程
多線程(英語:multithreading),是指從軟件或者硬件上實現(xiàn)多個線程并發(fā)執(zhí)行的技術(shù)。具有多線程能力的計算機因有硬件支持而能夠在同一時間執(zhí)行多于一個線程,進而提升整體處理性能。
多線程(英語:multithreading),是指從軟件或者硬件上實現(xiàn)多個線程并發(fā)執(zhí)行的技術(shù)。具有多線程能力的計算機因有硬件支持而能夠在同一時間執(zhí)行多于一個線程,進而提升整體處理性能。具有這種能力的系統(tǒng)包括對稱多處理機、多核心處理器以及芯片級多處理(Chip-level multithreading)或同時多線程(Simultaneous multithreading)處理器。在一個程序中,這些獨立運行的程序片段叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理(Multithreading)”。具有多線程能力的計算機因有硬件支持而能夠在同一時間執(zhí)行多于一個線程(臺灣譯作“執(zhí)行緒”),進而提升整體處理性能。
多線程(英語:multithreading),是指從軟件或者硬件上實現(xiàn)多個線程并發(fā)執(zhí)行的技術(shù)。具有多線程能力的計算機因有硬件支持而能夠在同一時間執(zhí)行多于一個線程,進而提升整體處理性能。具有這種能力的系統(tǒng)包括對稱多處理機、多核心處理器以及芯片級多處理(Chip-level multithreading)或同時多線程(Simultaneous multithreading)處理器。在一個程序中,這些獨立運行的程序片段叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理(Multithreading)”。具有多線程能力的計算機因有硬件支持而能夠在同一時間執(zhí)行多于一個線程(臺灣譯作“執(zhí)行緒”),進而提升整體處理性能。
硬件支持
多線程硬件支持的目標(biāo),即支持快速進行就緒態(tài)線程、執(zhí)行態(tài)線程間的切換。為達成這個目標(biāo),需要硬件實現(xiàn)保存、恢復(fù)程序看得見的寄存器以及一些對程序執(zhí)行有影響的控制寄存器(如程序計數(shù)器PC、程序狀態(tài)寄存器SR)。從一個線程切換到另一個線程對硬件來講意味著保存當(dāng)前線程的一組寄存器的值,并恢復(fù)即將執(zhí)行線程的一組寄存器的值。
新增這些功能的硬件有以下優(yōu)勢:
線程切換能夠在一個 CPU 周期內(nèi)完成(有些硬件甚至沒有開銷,上個周期在運行線程A,下個周期就已在運行線程B)。
每個線程看起來就像是獨自運行的,即沒有與其他線程共享硬件資源。對操作系統(tǒng)來說,通常每個線程都被視做獨占一個處理器,這樣將簡化系統(tǒng)軟件的設(shè)計(尤其是對于支持多線程的操作系統(tǒng))。
為了在各個線程間有效率的進行切換,每個線程需要保存自己的一組寄存器集(register set)。有些硬件設(shè)計成每個處理器核心具有兩組寄存器文件,以實現(xiàn)在多個線程間快速切換。
多線程有什么用?
這么解釋問題吧:
1。單進程單線程:一個人在一個桌子上吃菜。
2。單進程多線程:多個人在同一個桌子上一起吃菜。
3。多進程單線程:多個人每個人在自己的桌子上吃菜。
多線程的問題是多個人同時吃一道菜的時候容易發(fā)生爭搶,例如兩個人同時夾一個菜,一個人剛伸出筷子,結(jié)果伸到的時候已經(jīng)被夾走菜了。。。此時就必須等一個人夾一口之后,在還給另外一個人夾菜,也就是說資源共享就會發(fā)生沖突爭搶。
1。對于 Windows 系統(tǒng)來說,【開桌子】的開銷很大,因此 Windows 鼓勵大家在一個桌子上吃菜。因此 Windows 多線程學(xué)習(xí)重點是要大量面對資源爭搶與同步方面的問題。
2。對于 Linux 系統(tǒng)來說,【開桌子】的開銷很小,因此 Linux 鼓勵大家盡量每個人都開自己的桌子吃菜。這帶來新的問題是:坐在兩張不同的桌子上,說話不方便。因此,Linux 下的學(xué)習(xí)重點大家要學(xué)習(xí)進程間通訊的方法。
--
補充:有人對這個開桌子的開銷很有興趣。我把這個問題推廣說開一下。
開桌子的意思是指創(chuàng)建進程。開銷這里主要指的是時間開銷。
可以做個實驗:創(chuàng)建一個進程,在進程中往內(nèi)存寫若干數(shù)據(jù),然后讀出該數(shù)據(jù),然后退出。此過程重復(fù) 1000 次,相當(dāng)于創(chuàng)建/銷毀進程 1000 次。在我機器上的測試結(jié)果是:
UbuntuLinux:耗時 0.8 秒
Windows7:耗時 79.8 秒
兩者開銷大約相差一百倍。
這意味著,在 Windows 中,進程創(chuàng)建的開銷不容忽視。換句話說就是,Windows 編程中不建議你創(chuàng)建進程,如果你的程序架構(gòu)需要大量創(chuàng)建進程,那么最好是切換到 Linux 系統(tǒng)。
大量創(chuàng)建進程的典型例子有兩個,一個是 gnu autotools 工具鏈,用于編譯很多開源代碼的,他們在 Windows 下編譯速度會很慢,因此軟件開發(fā)人員最好是避免使用 Windows。另一個是服務(wù)器,某些服務(wù)器框架依靠大量創(chuàng)建進程來干活,甚至是對每個用戶請求就創(chuàng)建一個進程,這些服務(wù)器在 Windows 下運行的效率就會很差。這“可能”也是放眼全世界范圍,Linux 服務(wù)器遠遠多于 Windows 服務(wù)器的原因。
--
再次補充:如果你是寫服務(wù)器端應(yīng)用的,其實在現(xiàn)在的網(wǎng)絡(luò)服務(wù)模型下,開桌子的開銷是可以忽略不計的,因為現(xiàn)在一般流行的是按照 CPU 核心數(shù)量開進程或者線程,開完之后在數(shù)量上一直保持,進程與線程內(nèi)部使用協(xié)程或者異步通信來處理多個并發(fā)連接,因而開進程與開線程的開銷可以忽略了。
另外一種新的開銷被提上日程:核心切換開銷。
現(xiàn)代的體系,一般 CPU 會有多個核心,而多個核心可以同時運行多個不同的線程或者進程。
當(dāng)每個 CPU 核心運行一個進程的時候,由于每個進程的資源都獨立,所以 CPU 核心之間切換的時候無需考慮上下文。
當(dāng)每個 CPU 核心運行一個線程的時候,由于每個線程需要共享資源,所以這些資源必須從 CPU 的一個核心被復(fù)制到另外一個核心,才能繼續(xù)運算,這占用了額外的開銷。換句話說,在 CPU 為多核的情況下,多線程在性能上不如多進程。
因而,當(dāng)前面向多核的服務(wù)器端編程中,需要習(xí)慣多進程而非多線程。
多線程好還是單線程好?單線程和多線程的區(qū)別 優(yōu)缺點分析
摘要:如今單線程與多線程已經(jīng)得到普遍運用,那么到底多線程好還是單線程好呢?單線程和多線程的區(qū)別又是什么呢?下面我們來看看它們的區(qū)別以及優(yōu)缺點分析。
AMD Ryzen 7 4800U參數(shù)測評及與Intel i7 10710U對比
在Cinebench R15多線程測試中,Ryzen 7 4800U比Intel的Core i7-9700K更快。這是一個15W的芯片(cTDP高達25...
整個項目需要控制16臺步進電機,21個電磁閥,3個泵,1個直流電機,系統(tǒng)要求全部執(zhí)行時間為6秒鐘,系統(tǒng)要求步進電機以其最快的速度-----40us—60...
LabVIEW多線程編程解析 LabVIEW的VI優(yōu)先級和并行循環(huán)等相關(guān)知識
軟件開發(fā)過程中總會遇到需要多線程同步運行的情況,尤其是一些復(fù)雜的測試系統(tǒng)和大型項目,僅靠單線程運行的程序是遠遠無法滿足用戶需求的,甚至可以說在復(fù)雜測試系...
摘要:多線程編程是現(xiàn)代軟件技術(shù)中很重要的一個環(huán)節(jié)。要弄懂多線程,這就要牽涉到多進程。本文主要以多線程編程以及多線程編程相關(guān)知識而做出的一些結(jié)論。
手機CPU構(gòu)架主要是基于ARM(高級精簡指令集機器Advanced RISC Machines)架構(gòu)設(shè)計,而ARM用精簡指令系統(tǒng)(RISC),設(shè)計思想減...
多線程服務(wù)器編程模型:如何正確使用mutex 和condition variable
本文對多線程服務(wù)器的常用編程模型進行了一個詳細的解讀,本文中的多線程服務(wù)器是運行在 Linux 操作系統(tǒng)上網(wǎng)絡(luò)應(yīng)用程序。介紹了典型的單線程服務(wù)器編程模型...
從I/O的阻塞與非阻塞、I/O處理的單線程與多線程角度探討服務(wù)器模型
這里探討的服務(wù)器模型主要指的是服務(wù)器端對I/O的處理模型。從不同維度可以有不同的分類,這里從I/O的阻塞與非阻塞、I/O處理的單線程與多線程角度探討服務(wù)器模型。
win10和win11各有優(yōu)勢,具體哪個更好要根據(jù)實際的應(yīng)用場景和需求來決定。 首先,從性能方面來看,Win11在單線程、多線程、渲染和3DMark運行...
類別:傳感與控制 2017-08-14 標(biāo)簽:微控制器多線程多核系統(tǒng)
類別:電子教材 2011-05-28 標(biāo)簽:芯片結(jié)構(gòu)多線程
類別:通信網(wǎng)絡(luò) 2017-09-07 標(biāo)簽:多線程線程池
Nodejs搭建的異步非阻塞服務(wù)器與傳統(tǒng)的阻塞多線程服務(wù)器區(qū)別立即下載
類別:網(wǎng)絡(luò)協(xié)議論文 2017-12-13 標(biāo)簽:服務(wù)器多線程Nodejs
單片機問題總結(jié):MPU6050的DMP模塊初始化放在線程啟動之前立即下載
類別:單片機 2021-12-06 標(biāo)簽:單片機操作系統(tǒng)多線程
Motrix是一款開源免費且界面非常清爽簡約的全能型下載軟件
Motrix 默認(rèn)開放了 Aria 2 的 JSON-RPC 支持,可以兼容所有支持 Aria2 的擴展插件或工具。默認(rèn)的 RPC 端口為 16800,...
天璣7200和天璣1100哪個好?天璣7200和天璣8200哪個好?
天璣7200和天璣1100哪個好? 天璣7200好一些。聯(lián)發(fā)科天璣 7200 采用第二代臺積電 4 納米工藝,與天璣 9200 系列相同。配備了兩個峰值...
STM 32系列是專門應(yīng)用在高性能、低成本、低功耗的嵌入式應(yīng)用設(shè)計的ARM Corte-M0,M0+,M3,M4和M7內(nèi)核,是主流的嵌入式單片機之一。
線程是CPU調(diào)度的最小單位(程序執(zhí)行流的最小單元),它被包含在進程之中,是進程中的實際運作單元。一條線程是進程中一個單一順序的控制流,一個進程中可以并發(fā)...
2020-11-29 標(biāo)簽:cpu多線程數(shù)據(jù)結(jié)構(gòu) 1.4萬 0
重大性能更新:Wasm 后端將利用 SIMD指令和 XNNPACK多線程
3 月,我們?yōu)?TensorFlow.js 推出了一個新的 WebAssembly(Wasm) 加速后端(繼續(xù)閱讀以進一步了解 Wasm 及其重要性)。...
前言本章分為兩個議題 如何正確關(guān)閉線程池 shutdown 和 shutdownNow 的區(qū)別 項目環(huán)境jdk 1.8 github 地址:https:...
1. 用函數(shù)創(chuàng)建多線程 在Python3中,Python提供了一個內(nèi)置模塊 threading.Thread ,可以很方便地讓我們創(chuàng)建多線程。 thre...
一般情況下,運行一個 VI,LabVIEW 至少會在兩個線程內(nèi)運行它:一個界面線程(UI Thread),用于處理界面刷新,用戶對控件的操作等等;還...
編輯推薦廠商產(chǎn)品技術(shù)軟件/工具OS/語言教程專題
電機控制 | DSP | 氮化鎵 | 功率放大器 | ChatGPT | 自動駕駛 | TI | 瑞薩電子 |
BLDC | PLC | 碳化硅 | 二極管 | OpenAI | 元宇宙 | 安森美 | ADI |
無刷電機 | FOC | IGBT | 逆變器 | 文心一言 | 5G | 英飛凌 | 羅姆 |
直流電機 | PID | MOSFET | 傳感器 | 人工智能 | 物聯(lián)網(wǎng) | NXP | 賽靈思 |
步進電機 | SPWM | 充電樁 | IPM | 機器視覺 | 無人機 | 三菱電機 | ST |
伺服電機 | 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 |