必威电竞|足球世界杯竞猜平台

同步多線程
來源:互聯網

同步多線程(SMT)是一種硬件多線程技術,能夠在單個CPU的時鐘周期內執行來自多個線程的指令。這是一種將線程級并行處理轉化為指令級并行處理的方法,旨在提高處理器的性能和系統吞吐量。SMT技術尤其適用于商用環境和CPI計數高的工作負載。

原理概述

同步多線程技術允許單個物理處理器同時調度多個硬件線程上下文的指令。當一個線程遇到長等待時間事件時,SMT允許另一個線程中的指令使用所有執行單元,從而避免處理器資源的浪費。功率5?和POWER6?處理器支持SMT,它可以與共享處理器一起使用。SMT技術可以使系統識別到雙倍于物理CPU數量的邏輯CPU,但并不意味著系統擁有了兩倍的CPU能力。SMT技術允許內核在同一時間運行兩個不同的進程,以此來壓縮多任務處理時所需要的時間。這樣做有兩個好處,其一是提高處理器的計算性能,減少用戶得到結果所需的時間;其二就是更好的能效表現,利用更短的時間來完成任務,這就意味著在剩下的時間里節約更多的電能消耗。

同步

事件

在同步多線程中,事件是一種常用的同步機制。事件分為手動重置事件和自動重置事件。手動重置事件被設置為激發狀態后,會喚醒所有等待的線程,而且一直保持為激發狀態,直到程序重新把它設置為未激發狀態。自動重置事件被設置為激發狀態后,會喚醒“一個”等待中的線程,然后自動恢復為未激發狀態。使用自動重置事件來同步兩個線程是比較理想的。在mfc中,對應的類為CEvent。CEvent的構造函數默認創建一個自動重置的事件,而且處于未激發狀態。共有三個函數來改變事件的狀態:SetEvent,ResetEvent和PulseEvent。使用事件來同步線程是一種比較理想的做法,但在實際的使用過程中要注意的是,對自動重置事件調用SetEvent和PulseEvent有可能會引起死鎖,必須小心。

臨界區

臨界區也是一種同步機制,它確保同一時間只有一個線程可以訪問特定的資源。在mfc中,對應的類是CCriticalSection。CCriticalSection::Lock()進入臨界區,CCriticalSection::Unlock()離開臨界區。使用臨界區域的第一個忠告就是不要長時間鎖住一份資源。臨界區域的一個缺點就是:Critical Section不是一個核心對象,無法獲知進入臨界區的線程是生是死,如果進入臨界區的線程掛了,沒有釋放臨界資源,系統無法獲知,而且沒有辦法釋放該臨界資源。這個缺點在互斥器(Mutex)中得到了彌補。

互斥器

互斥器的功能和臨界區域很相似。區別是:Mutex所花費的時間比Critical Section多的多,但是Mutex是核心對象(Event、Semaphore也是),可以跨進程使用,而且等待一個被鎖住的Mutex可以設定TIMEOUT,不會像Critical Section那樣無法得知臨界區域的情況,而一直死等。MFC中的對應類為CMutex。win32函數有:創建互斥體CreateMutex() ,打開互斥體OpenMutex(),釋放互斥體ReleaseMutex()。Mutex的擁有權并非屬于那個產生它的線程,而是最后那個對此Mutex進行等待操作(WaitForSingleObject等等)并且尚未進行ReleaseMutex()操作的線程。線程擁有Mutex就好像進入Critical Section一樣,一次只能有一個線程擁有該Mutex。如果一個擁有Mutex的線程在返回之前沒有調用ReleaseMutex(),那么這個Mutex就被舍棄了,但是當其他線程等待(WaitForSingleObject等)這個Mutex時,仍能返回,并得到一個WAIT_ABANDONED_0返回值。能夠知道一個Mutex被舍棄是Mutex特有的。

信號量

信號量是最具歷史的同步機制。信號量是解決producer/consumer問題的關鍵要素。對應的MFC類是CSemaphore。win32函數CreateSemaphore()用來產生信號量。ReleaseSemaphore()用來解除鎖定。Semaphore的現值代表的意義是可用的資源數,如果Semaphore的現值為1,表示還有一個鎖定動作可以成功。如果現值為5,就表示還有五個鎖定動作可以成功。當調用Wait…等函數要求鎖定,如果Semaphore現值不為0,Wait…馬上返回,資源數減1。當調用ReleaseSemaphore()資源數加1,當然不會超過初始設定的資源總數。

工作方式

同步多線程技術的工作原理是,當一個線程遇到長等待時間事件時,硬件會切換到另一個線程以使用處理資源,而不是讓服務器保持空閑狀態。這種設計允許其他任務使用原本將空閑的處理器周期,從而提高了總系統吞吐量。為了節省資源,兩個線程共享許多系統資源,如結構寄存器。因此,將程序控制從一個線程切換到另一個線程需要數個周期。

參考資料 >

格蘭菲:同步多線程是什么.搜狐網.2024-11-19

多線程處理器的指令分發方法、裝置和存儲介質與流程.X技術.2024-11-19

同步多線程分類.CSDN博客.2024-11-19

計算機組成原理之硬件多線程的基本概念.CSDN博客.2024-11-19

生活家百科家居網