日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

为什么要把进程/线程绑定到特定cpu核上运行?(cpu core id coreIdx)opdevsdk_sys_bindThreadCoreId()

發(fā)布時(shí)間:2025/3/20 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么要把进程/线程绑定到特定cpu核上运行?(cpu core id coreIdx)opdevsdk_sys_bindThreadCoreId() 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

看海康hikflow_demo代碼,在線程處理函數(shù)里調(diào)用了綁定函數(shù),把這個(gè)線程綁定到某個(gè)cpu核上,不知為何要這么做?

原因

答1

現(xiàn)在大家使用的基本上都是多核cpu,一般是4核的。平時(shí)應(yīng)用程序在運(yùn)行時(shí)都是由操作系統(tǒng)管理的。操作系統(tǒng)對(duì)應(yīng)用進(jìn)程進(jìn)行調(diào)度,使其在不同的核上輪番運(yùn)行。

對(duì)于普通的應(yīng)用,操作系統(tǒng)的默認(rèn)調(diào)度機(jī)制是沒(méi)有問(wèn)題的。但是,當(dāng)某個(gè)進(jìn)程需要較高的運(yùn)行效率時(shí),就有必要考慮將其綁定到單獨(dú)的核上運(yùn)行,以減小由于在不同的核上調(diào)度造成的開銷。

把某個(gè)進(jìn)程/線程綁定到特定的cpu核上后,該進(jìn)程就會(huì)一直在此核上運(yùn)行,不會(huì)再被操作系統(tǒng)調(diào)度到其他核上。但綁定的這個(gè)核上還是可能會(huì)被調(diào)度運(yùn)行其他應(yīng)用程序的。

參考文章:linux下把進(jìn)程/線程綁定到特定cpu核上運(yùn)行

答2

C語(yǔ)言作為語(yǔ)言本身,并沒(méi)有強(qiáng)制把線程、進(jìn)程綁定到特定CPU核的要求和機(jī)制,綁定的方法有,與硬件架構(gòu)和操作系統(tǒng)密切相關(guān),但與C語(yǔ)言無(wú)關(guān)。

線程、進(jìn)程綁定cpu內(nèi)核的原因是為了優(yōu)化、加速運(yùn)行或者特定CPU架構(gòu)和操作系統(tǒng)要求,特別是操作系統(tǒng)要求(及實(shí)現(xiàn))。

最傳統(tǒng)的多核架構(gòu)是SMP,每個(gè)CPU核完全平等甚至無(wú)法區(qū)分,cache,內(nèi)存都是全局的,在這種情況下,綁定CPU核無(wú)意義,而且也違背架構(gòu)設(shè)計(jì)的基礎(chǔ):對(duì)上層OS和應(yīng)用透明。但隨著CPU核增多,SMP架構(gòu)的全局平等方案導(dǎo)致用于一致性、互聯(lián)的實(shí)現(xiàn)成本越來(lái)越高(互聯(lián)電路、沖突處理等等),最后當(dāng)CPU核心很多時(shí),通用計(jì)算系統(tǒng)不得不采用更經(jīng)濟(jì)的架構(gòu),例如NUMA這種一層一層局部互聯(lián)、分組互聯(lián),最終全局互聯(lián)的方案,這時(shí)候綁定CPU就有意義了,其實(shí)也是需要通過(guò)綁定CPU核配合CPU核之間不再是完全平等的,是有所謂“遠(yuǎn)、近”區(qū)別的。綁定的目的是使存放該線程、進(jìn)程的存儲(chǔ)(內(nèi)存、cache)與運(yùn)行這些數(shù)據(jù)指令的CPU核更貼近,而不用從遠(yuǎn)處的內(nèi)存、cache獲取(因?yàn)閮?nèi)存、cache訪問(wèn)不再是全局的,而是局部的,只是具有虛擬的全局可訪問(wèn)性)。這種方案一般只在操作系統(tǒng)調(diào)度算法中會(huì)顯式使用,其它程序基本不會(huì)主動(dòng)去探測(cè),因?yàn)榫€程、進(jìn)程自己沒(méi)有能力去強(qiáng)制改變運(yùn)行自己的CPU核,只能檢測(cè)。檢測(cè)出來(lái)運(yùn)行自己的CPU核之后,難道自己把自己掛掉?依然沒(méi)效率。所以除了編寫OS中進(jìn)程、線程調(diào)度算法部分,你是看不到有關(guān)指令的。

大部分相關(guān)指令是一種編程技巧,就是利用CPU核自身ID去獲得唯一的數(shù)據(jù)隊(duì)列標(biāo)志,每個(gè)CPU核分配一個(gè)隊(duì)列(一般是環(huán)形隊(duì)列),這樣就物理上保證了隊(duì)列不會(huì)有多個(gè)consumer或producer,天然不用考慮鎖問(wèn)題。在操作系統(tǒng)和驅(qū)動(dòng)程序編程中,經(jīng)常用到這種技巧。

參考文章:C語(yǔ)言為什么要把線程/進(jìn)程綁定到特定的cpu核運(yùn)行? - harry4112的回答 - 知乎

總結(jié)

以上是生活随笔為你收集整理的为什么要把进程/线程绑定到特定cpu核上运行?(cpu core id coreIdx)opdevsdk_sys_bindThreadCoreId()的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。