完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>
標(biāo)簽 > 多線程
多線程(英語(yǔ):multithreading),是指從軟件或者硬件上實(shí)現(xiàn)多個(gè)線程并發(fā)執(zhí)行的技術(shù)。具有多線程能力的計(jì)算機(jī)因有硬件支持而能夠在同一時(shí)間執(zhí)行多于一個(gè)線程,進(jìn)而提升整體處理性能。
多線程(英語(yǔ):multithreading),是指從軟件或者硬件上實(shí)現(xiàn)多個(gè)線程并發(fā)執(zhí)行的技術(shù)。具有多線程能力的計(jì)算機(jī)因有硬件支持而能夠在同一時(shí)間執(zhí)行多于一個(gè)線程,進(jìn)而提升整體處理性能。具有這種能力的系統(tǒng)包括對(duì)稱(chēng)多處理機(jī)、多核心處理器以及芯片級(jí)多處理(Chip-level multithreading)或同時(shí)多線程(Simultaneous multithreading)處理器。在一個(gè)程序中,這些獨(dú)立運(yùn)行的程序片段叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理(Multithreading)”。具有多線程能力的計(jì)算機(jī)因有硬件支持而能夠在同一時(shí)間執(zhí)行多于一個(gè)線程(臺(tái)灣譯作“執(zhí)行緒”),進(jìn)而提升整體處理性能。
多線程(英語(yǔ):multithreading),是指從軟件或者硬件上實(shí)現(xiàn)多個(gè)線程并發(fā)執(zhí)行的技術(shù)。具有多線程能力的計(jì)算機(jī)因有硬件支持而能夠在同一時(shí)間執(zhí)行多于一個(gè)線程,進(jìn)而提升整體處理性能。具有這種能力的系統(tǒng)包括對(duì)稱(chēng)多處理機(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ù)程序看得見(jiàn)的寄存器以及一些對(duì)程序執(zhí)行有影響的控制寄存器(如程序計(jì)數(shù)器PC、程序狀態(tài)寄存器SR)。從一個(gè)線程切換到另一個(gè)線程對(duì)硬件來(lái)講意味著保存當(dāng)前線程的一組寄存器的值,并恢復(fù)即將執(zhí)行線程的一組寄存器的值。
新增這些功能的硬件有以下優(yōu)勢(shì):
線程切換能夠在一個(gè) CPU 周期內(nèi)完成(有些硬件甚至沒(méi)有開(kāi)銷(xiāo),上個(gè)周期在運(yùn)行線程A,下個(gè)周期就已在運(yùn)行線程B)。
每個(gè)線程看起來(lái)就像是獨(dú)自運(yùn)行的,即沒(méi)有與其他線程共享硬件資源。對(duì)操作系統(tǒng)來(lái)說(shuō),通常每個(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è)線程間快速切換。
多線程有什么用?
這么解釋問(wèn)題吧:
1。單進(jìn)程單線程:一個(gè)人在一個(gè)桌子上吃菜。
2。單進(jìn)程多線程:多個(gè)人在同一個(gè)桌子上一起吃菜。
3。多進(jìn)程單線程:多個(gè)人每個(gè)人在自己的桌子上吃菜。
多線程的問(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 多線程學(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ō)話不方便。因此,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)不容忽視。換句話說(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)程或者線程,開(kāi)完之后在數(shù)量上一直保持,進(jìn)程與線程內(nèi)部使用協(xié)程或者異步通信來(lái)處理多個(gè)并發(fā)連接,因而開(kāi)進(jìn)程與開(kāi)線程的開(kāi)銷(xiāo)可以忽略了。
另外一種新的開(kāi)銷(xiāo)被提上日程:核心切換開(kāi)銷(xiāo)。
現(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í)候無(wú)需考慮上下文。
當(dāng)每個(gè) CPU 核心運(yùn)行一個(gè)線程的時(shí)候,由于每個(gè)線程需要共享資源,所以這些資源必須從 CPU 的一個(gè)核心被復(fù)制到另外一個(gè)核心,才能繼續(xù)運(yùn)算,這占用了額外的開(kāi)銷(xiāo)。換句話說(shuō),在 CPU 為多核的情況下,多線程在性能上不如多進(jìn)程。
因而,當(dāng)前面向多核的服務(wù)器端編程中,需要習(xí)慣多進(jìn)程而非多線程。
多線程好還是單線程好?單線程和多線程的區(qū)別 優(yōu)缺點(diǎn)分析
摘要:如今單線程與多線程已經(jīng)得到普遍運(yùn)用,那么到底多線程好還是單線程好呢?單線程和多線程的區(qū)別又是什么呢?下面我們來(lái)看看它們的區(qū)別以及優(yōu)缺點(diǎn)分析。
AMD Ryzen 7 4800U參數(shù)測(cè)評(píng)及與Intel i7 10710U對(duì)比
在Cinebench R15多線程測(cè)試中,Ryzen 7 4800U比Intel的Core i7-9700K更快。這是一個(gè)15W的芯片(cTDP高達(dá)25...
整個(gè)項(xiàng)目需要控制16臺(tái)步進(jìn)電機(jī),21個(gè)電磁閥,3個(gè)泵,1個(gè)直流電機(jī),系統(tǒng)要求全部執(zhí)行時(shí)間為6秒鐘,系統(tǒng)要求步進(jìn)電機(jī)以其最快的速度-----40us—60...
LabVIEW多線程編程解析 LabVIEW的VI優(yōu)先級(jí)和并行循環(huán)等相關(guān)知識(shí)
軟件開(kāi)發(fā)過(guò)程中總會(huì)遇到需要多線程同步運(yùn)行的情況,尤其是一些復(fù)雜的測(cè)試系統(tǒng)和大型項(xiàng)目,僅靠單線程運(yùn)行的程序是遠(yuǎn)遠(yuǎn)無(wú)法滿(mǎn)足用戶(hù)需求的,甚至可以說(shuō)在復(fù)雜測(cè)試系...
摘要:多線程編程是現(xiàn)代軟件技術(shù)中很重要的一個(gè)環(huán)節(jié)。要弄懂多線程,這就要牽涉到多進(jìn)程。本文主要以多線程編程以及多線程編程相關(guān)知識(shí)而做出的一些結(jié)論。
很多時(shí)候在一個(gè)VI的不同線程或者不同VI的不同線程中需要有一些交互——這些線程并不能完全獨(dú)立運(yùn)行,需要一定的數(shù)據(jù)通信才能正確執(zhí)行,這時(shí)就需要在編程時(shí)使用...
手機(jī)CPU構(gòu)架主要是基于ARM(高級(jí)精簡(jiǎn)指令集機(jī)器Advanced RISC Machines)架構(gòu)設(shè)計(jì),而ARM用精簡(jiǎn)指令系統(tǒng)(RISC),設(shè)計(jì)思想減...
多線程服務(wù)器編程模型:如何正確使用mutex 和condition variable
本文對(duì)多線程服務(wù)器的常用編程模型進(jìn)行了一個(gè)詳細(xì)的解讀,本文中的多線程服務(wù)器是運(yùn)行在 Linux 操作系統(tǒng)上網(wǎng)絡(luò)應(yīng)用程序。介紹了典型的單線程服務(wù)器編程模型...
從I/O的阻塞與非阻塞、I/O處理的單線程與多線程角度探討服務(wù)器模型
這里探討的服務(wù)器模型主要指的是服務(wù)器端對(duì)I/O的處理模型。從不同維度可以有不同的分類(lèi),這里從I/O的阻塞與非阻塞、I/O處理的單線程與多線程角度探討服務(wù)器模型。
基于STM32的虛擬多線程(TI_BLE協(xié)議棧_ZStack協(xié)議棧)
基于STM32的虛擬多線程,可以很好的用于裸機(jī)程序中,用于模擬小型操作系統(tǒng)的多線程概念。本實(shí)例參考了參考TI_BLE協(xié)議棧_ZStack協(xié)議棧。
類(lèi)別:傳感與控制 2017-08-14 標(biāo)簽:微控制器多線程多核系統(tǒng)
同時(shí)多線程結(jié)構(gòu)研究綜述立即下載
類(lèi)別:電子教材 2011-05-28 標(biāo)簽:芯片結(jié)構(gòu)多線程
類(lèi)別:通信網(wǎng)絡(luò) 2017-09-07 標(biāo)簽:多線程線程池
類(lèi)別:嵌入式開(kāi)發(fā) 2017-10-19 標(biāo)簽:多核多線程
Nodejs搭建的異步非阻塞服務(wù)器與傳統(tǒng)的阻塞多線程服務(wù)器區(qū)別立即下載
類(lèi)別:網(wǎng)絡(luò)協(xié)議論文 2017-12-13 標(biāo)簽:服務(wù)器多線程Nodejs
單片機(jī)問(wèn)題總結(jié):MPU6050的DMP模塊初始化放在線程啟動(dòng)之前立即下載
類(lèi)別:單片機(jī) 2021-12-06 標(biāo)簽:單片機(jī)操作系統(tǒng)多線程
類(lèi)別:C語(yǔ)言|源代碼 2017-05-16 標(biāo)簽:多線程聊天室
msp430的中斷優(yōu)先級(jí)和中斷嵌套(及容易理解錯(cuò)誤的說(shuō)明)立即下載
類(lèi)別:單片機(jī) 2021-11-19 標(biāo)簽:串口通信多線程430單片機(jī)
Motrix是一款開(kāi)源免費(fèi)且界面非常清爽簡(jiǎn)約的全能型下載軟件
Motrix 默認(rèn)開(kāi)放了 Aria 2 的 JSON-RPC 支持,可以兼容所有支持 Aria2 的擴(kuò)展插件或工具。默認(rèn)的 RPC 端口為 16800,...
天璣7200和天璣1100哪個(gè)好?天璣7200和天璣8200哪個(gè)好?
天璣7200和天璣1100哪個(gè)好? 天璣7200好一些。聯(lián)發(fā)科天璣 7200 采用第二代臺(tái)積電 4 納米工藝,與天璣 9200 系列相同。配備了兩個(gè)峰值...
stm32多線程 單片機(jī)如何實(shí)現(xiàn)多線程
STM 32系列是專(zhuān)門(mén)應(yīng)用在高性能、低成本、低功耗的嵌入式應(yīng)用設(shè)計(jì)的ARM Corte-M0,M0+,M3,M4和M7內(nèi)核,是主流的嵌入式單片機(jī)之一。
線程是CPU調(diào)度的最小單位(程序執(zhí)行流的最小單元),它被包含在進(jìn)程之中,是進(jìn)程中的實(shí)際運(yùn)作單元。一條線程是進(jìn)程中一個(gè)單一順序的控制流,一個(gè)進(jìn)程中可以并發(fā)...
2020-11-29 標(biāo)簽:cpu多線程數(shù)據(jù)結(jié)構(gòu) 1.4萬(wàn) 0
重大性能更新:Wasm 后端將利用 SIMD指令和 XNNPACK多線程
3 月,我們?yōu)?TensorFlow.js 推出了一個(gè)新的 WebAssembly(Wasm) 加速后端(繼續(xù)閱讀以進(jìn)一步了解 Wasm 及其重要性)。...
前言本章分為兩個(gè)議題 如何正確關(guān)閉線程池 shutdown 和 shutdownNow 的區(qū)別 項(xiàng)目環(huán)境jdk 1.8 github 地址:https:...
多核CPU、多進(jìn)程、多線程之間的聯(lián)系解析
多核心cpu主要分原生多核和封裝多核。Windows 應(yīng)用程序中消息有兩種送出途徑;直接和排隊(duì)。Windows或某些運(yùn)行的應(yīng)用程序可直接發(fā)布消息給窗口過(guò)...
RTOS多線程(任務(wù))訪問(wèn)同一硬件(如UART)的方法
1. 用函數(shù)創(chuàng)建多線程 在Python3中,Python提供了一個(gè)內(nèi)置模塊 threading.Thread ,可以很方便地讓我們創(chuàng)建多線程。 thre...
一般情況下,運(yùn)行一個(gè) VI,LabVIEW 至少會(huì)在兩個(gè)線程內(nèi)運(yùn)行它:一個(gè)界面線程(UI Thread),用于處理界面刷新,用戶(hù)對(duì)控件的操作等等;還...
編輯推薦廠商產(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 |