怎么理解多核編程中的線程分組競爭模式

這篇文章主要介紹“怎么理解多核編程中的線程分組競爭模式”,在日常操作中,相信很多人在怎么理解多核編程中的線程分組競爭模式問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么理解多核編程中的線程分組競爭模式”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)建站從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站設(shè)計、網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元鹿城做網(wǎng)站,已為上家服務(wù),為鹿城各地企業(yè)和個人服務(wù),聯(lián)系電話:18980820575

在多核編程中,鎖競爭導(dǎo)致的CPU饑餓現(xiàn)象是引起多核CPU性能無法發(fā)揮的最重要原因之一,在多核編程中的鎖競爭難題一文中已經(jīng)講過鎖競爭對性能的影響,如何消解鎖競爭導(dǎo)致的CPU饑餓現(xiàn)象成了迫切需要解決的問題。

目 前業(yè)界發(fā)展的無鎖編程技術(shù)可以有效降低鎖競爭引起的性能下降問題,無鎖編程主要是采用原子操作來替代鎖,只存在原子操作競爭問題,由于原子操作只是一條指 令,速度非常快,因此可以近似地看成是無鎖競爭的,除非原子操作非常頻繁。無鎖編程難度非常高,從目前的情況來看,普通程序員要親自進行無鎖編程是不現(xiàn)實 的事情。并且目前只有少數(shù)數(shù)據(jù)結(jié)構(gòu)可以實現(xiàn)無鎖編程,從目前商用的無鎖編程庫NOBLE來看,只提供了隊列、棧、鏈表、詞典、帶引用計數(shù)的垃圾回收內(nèi)存管理等少數(shù)幾種無鎖編程結(jié)構(gòu),只能解決部分鎖競爭問題,這個庫的售價高昂,以下是從NOBLE的網(wǎng)站上拷貝下來的售價。

$1395 USD, NOBLE Professional Edition, Evaluation License 1 Months, Windows

$3295 USD, NOBLE Professional Edition, Evaluation License 3 Months, Windows

看了這個售價,估計國內(nèi)也沒有多少公司愿意出這么高昂的價錢的購買這個一個功能有限,且使用起來不像以前的使用鎖的庫那么方便的庫。

既然沒有無鎖編程的免費午餐可以享用,那么使用鎖來編程的話,可不可以避免鎖競爭導(dǎo)致的CPU饑餓現(xiàn)象呢?答案是可以的,這就是文章標(biāo)題中的線程分組競爭模式,它使用鎖來進行保護共享數(shù)據(jù),但是又避免了鎖競爭時出現(xiàn)CPU饑餓現(xiàn)象。其實這個模式在業(yè)界已經(jīng)有了很成功的實踐,那就是隊列池。當(dāng)然這個模式的應(yīng)用不僅僅限于隊列池,也可以用到很多其他的滿足一定條件的共享數(shù)據(jù)保護上。

先看一下線程分組競爭模式的基本思想,所謂線程分組競爭就是將線程分成若干個組,每個組的線程間存在鎖競爭,但是不同組之間的線程不存在鎖競爭。下圖以添加操作和刪除操作作為示例來顯示2個分組線程競爭的情況:

怎么理解多核編程中的線程分組競爭模式

圖中顯示了兩個分組的線程競爭情況,共有四個線程分成兩組進行競爭,添加操作線程1和刪除操作線程1之間存在鎖競爭情況,添加操作線程2和刪除操作線程2之間存在鎖競爭情況,但是添加操作線程1(或刪除操作線程1)和添加操作線程2和刪除操作線程2之間不存在鎖競爭。

在這種分組鎖競爭模式下,任意一組線程中,至少有一個線程在執(zhí)行,因此如果有N組線程的話,那么至少有N個線程在執(zhí)行,如果N大于等于CPU的核數(shù),那么任意一個CPU     核上都有線程一直在運行,可以充分保證CPU不會產(chǎn)生饑餓現(xiàn)象。

并不是任意共享數(shù)據(jù)都可以采用線程分組競爭的形式來進行訪問,共享數(shù)據(jù)必須可以分成若干個獨立的子數(shù)據(jù),每次操作只需要操作某個子數(shù)據(jù),一次操作中不需要操作多個子數(shù)據(jù)。

線程分組競爭模式和無鎖編程相比,有著很大的優(yōu)勢,最重要的優(yōu)勢有兩點:

一、使用有鎖編程,編程難度很小,易于為普通程序員掌握。

二、并發(fā)性比無鎖編程更好,無鎖編程中存在原子操作競爭問題,其競爭激烈程度會隨CPU核數(shù)增加而增加,特別是當(dāng)原子操作包含在大循環(huán)中時,原子操作競爭最壞情況下會使性能降到和單核CPU一樣。而線程分組模式中各個CPU核完全是并行運行的,CPU核相互間不存在競爭問題,因此CPU核數(shù)增加不會造成任何影響。

以上講的是線程分組競爭模式的一種情況,實際情況中很多情況和這種模式并不完全符合,因此線程分組模式存在一些變種以適應(yīng)更多的實際情況。下圖便是一個最常見的變種:

怎么理解多核編程中的線程分組競爭模式

如上圖所示,在這個變種中添加操作線程只有一個,而刪除操作線程卻有兩個,添加操作線程A如果操作子內(nèi)存區(qū)域1,則使用lock1,操作子內(nèi)存區(qū)域2時則使用lock2。添加操作線程A可以和刪除操作線程1和刪除操作線程2存在鎖競爭,但是刪除操作線程1和刪除操作線程2之間不存在鎖競爭。從運行情況來看,3個線程中至少有2個在同時運行,如果有N個子內(nèi)存區(qū)域和N個刪除操作線程的話,那么至少有N個線程在同時運行,因此這種鎖競爭模式中,同樣可以保證當(dāng)CPU核數(shù)少于等于線程分組的個數(shù)時,不會發(fā)生CPU饑餓現(xiàn)象。隊列池便是這種模式的一個很好的成功實踐。

線程分組競爭模式是消除鎖競爭造成多核CPU性能下降的最有效方式,它的性能近似于單核CPU中的多線程編程的性能,這種模式也是設(shè)計本地分布式數(shù)據(jù)結(jié)構(gòu)的一種有效方法。

到此,關(guān)于“怎么理解多核編程中的線程分組競爭模式”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

文章名稱:怎么理解多核編程中的線程分組競爭模式
標(biāo)題路徑:http://muchs.cn/article48/gdisep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、外貿(mào)建站用戶體驗、ChatGPT商城網(wǎng)站、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護公司