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