您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么理解多核編程中的線程分組競爭模式”,在日常操作中,相信很多人在怎么理解多核編程中的線程分組競爭模式問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么理解多核編程中的線程分組競爭模式”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
在多核編程中,鎖競爭導致的CPU饑餓現象是引起多核CPU性能無法發揮的最重要原因之一,在多核編程中的鎖競爭難題一文中已經講過鎖競爭對性能的影響,如何消解鎖競爭導致的CPU饑餓現象成了迫切需要解決的問題。
目 前業界發展的無鎖編程技術可以有效降低鎖競爭引起的性能下降問題,無鎖編程主要是采用原子操作來替代鎖,只存在原子操作競爭問題,由于原子操作只是一條指 令,速度非常快,因此可以近似地看成是無鎖競爭的,除非原子操作非常頻繁。無鎖編程難度非常高,從目前的情況來看,普通程序員要親自進行無鎖編程是不現實 的事情。并且目前只有少數數據結構可以實現無鎖編程,從目前商用的無鎖編程庫NOBLE來看,只提供了隊列、棧、鏈表、詞典、帶引用計數的垃圾回收內存管理等少數幾種無鎖編程結構,只能解決部分鎖競爭問題,這個庫的售價高昂,以下是從NOBLE的網站上拷貝下來的售價。
$1395 USD, NOBLE Professional Edition, Evaluation License 1 Months, Windows
$3295 USD, NOBLE Professional Edition, Evaluation License 3 Months, Windows
看了這個售價,估計國內也沒有多少公司愿意出這么高昂的價錢的購買這個一個功能有限,且使用起來不像以前的使用鎖的庫那么方便的庫。
既然沒有無鎖編程的免費午餐可以享用,那么使用鎖來編程的話,可不可以避免鎖競爭導致的CPU饑餓現象呢?答案是可以的,這就是文章標題中的線程分組競爭模式,它使用鎖來進行保護共享數據,但是又避免了鎖競爭時出現CPU饑餓現象。其實這個模式在業界已經有了很成功的實踐,那就是隊列池。當然這個模式的應用不僅僅限于隊列池,也可以用到很多其他的滿足一定條件的共享數據保護上。
先看一下線程分組競爭模式的基本思想,所謂線程分組競爭就是將線程分成若干個組,每個組的線程間存在鎖競爭,但是不同組之間的線程不存在鎖競爭。下圖以添加操作和刪除操作作為示例來顯示2個分組線程競爭的情況:
圖中顯示了兩個分組的線程競爭情況,共有四個線程分成兩組進行競爭,添加操作線程1和刪除操作線程1之間存在鎖競爭情況,添加操作線程2和刪除操作線程2之間存在鎖競爭情況,但是添加操作線程1(或刪除操作線程1)和添加操作線程2和刪除操作線程2之間不存在鎖競爭。
在這種分組鎖競爭模式下,任意一組線程中,至少有一個線程在執行,因此如果有N組線程的話,那么至少有N個線程在執行,如果N大于等于CPU的核數,那么任意一個CPU 核上都有線程一直在運行,可以充分保證CPU不會產生饑餓現象。
并不是任意共享數據都可以采用線程分組競爭的形式來進行訪問,共享數據必須可以分成若干個獨立的子數據,每次操作只需要操作某個子數據,一次操作中不需要操作多個子數據。
線程分組競爭模式和無鎖編程相比,有著很大的優勢,最重要的優勢有兩點:
一、使用有鎖編程,編程難度很小,易于為普通程序員掌握。
二、并發性比無鎖編程更好,無鎖編程中存在原子操作競爭問題,其競爭激烈程度會隨CPU核數增加而增加,特別是當原子操作包含在大循環中時,原子操作競爭最壞情況下會使性能降到和單核CPU一樣。而線程分組模式中各個CPU核完全是并行運行的,CPU核相互間不存在競爭問題,因此CPU核數增加不會造成任何影響。
以上講的是線程分組競爭模式的一種情況,實際情況中很多情況和這種模式并不完全符合,因此線程分組模式存在一些變種以適應更多的實際情況。下圖便是一個最常見的變種:
如上圖所示,在這個變種中添加操作線程只有一個,而刪除操作線程卻有兩個,添加操作線程A如果操作子內存區域1,則使用lock1,操作子內存區域2時則使用lock2。添加操作線程A可以和刪除操作線程1和刪除操作線程2存在鎖競爭,但是刪除操作線程1和刪除操作線程2之間不存在鎖競爭。從運行情況來看,3個線程中至少有2個在同時運行,如果有N個子內存區域和N個刪除操作線程的話,那么至少有N個線程在同時運行,因此這種鎖競爭模式中,同樣可以保證當CPU核數少于等于線程分組的個數時,不會發生CPU饑餓現象。隊列池便是這種模式的一個很好的成功實踐。
線程分組競爭模式是消除鎖競爭造成多核CPU性能下降的最有效方式,它的性能近似于單核CPU中的多線程編程的性能,這種模式也是設計本地分布式數據結構的一種有效方法。
到此,關于“怎么理解多核編程中的線程分組競爭模式”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。