新聞中心
隨著現(xiàn)代計(jì)算機(jī)CPU的核心數(shù)量越來越多,多線程編程已成為現(xiàn)代程序員必備技能。然而,多線程編程的一個常見問題就是線程搶占,它能夠顯著影響程序的性能。在Linux環(huán)境中,線程搶占已經(jīng)被納入操作系統(tǒng)核心中,多線程編程者可以利用這種機(jī)制,提高程序的運(yùn)行效率。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比善右網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式善右網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋善右地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴。
什么是線程搶占?
線程搶占是指當(dāng)多個線程同時運(yùn)行時,操作系統(tǒng)根據(jù)規(guī)則強(qiáng)制立即停止當(dāng)前正在運(yùn)行的線程,并讓優(yōu)先級高的線程接管CPU的時間片。因此,線程搶占是一種優(yōu)先級管理機(jī)制,它允許更高優(yōu)先級的線程優(yōu)先處理,以確保系統(tǒng)得到更好的響應(yīng)時間和性能。
Linux系統(tǒng)的線程搶占
Linux系統(tǒng)自2023年內(nèi)核版本2.6.23之后,實(shí)現(xiàn)了基于時間片和實(shí)時優(yōu)先級兩種策略的線程搶占機(jī)制。這個機(jī)制可以讓操作系統(tǒng)切換線程時執(zhí)行更平穩(wěn),以提高多線程程序的響應(yīng)度和運(yùn)行效率。
Linux搶占的兩種策略
在時間片策略中,線程執(zhí)行的時間是有限制的,Linux允許操作系統(tǒng)協(xié)調(diào)線程,從而確保每個線程都有足夠的時間片來執(zhí)行自己的任務(wù)。
實(shí)時優(yōu)先級策略允許使用程序員指定線程的優(yōu)先級,以確保關(guān)鍵線程能夠得到必要的處理時間。如果在程序執(zhí)行期間,更高優(yōu)先級的線程被創(chuàng)建或是發(fā)生特定事件,會對低優(yōu)先級線程進(jìn)行搶占。
利用線程搶占提高多線程運(yùn)行效率
線程搶占機(jī)制在現(xiàn)代程序設(shè)計(jì)中發(fā)揮了重要作用。例如,在多線程服務(wù)器應(yīng)用程序中,可以充分利用線程搶占機(jī)制來更好地分配工作負(fù)載。操作系統(tǒng)可以自動根據(jù)程序優(yōu)先級分配運(yùn)行時間,從而提高并發(fā)處理的效率。
此外,在高性能系統(tǒng)中,利用線程搶占來控制系統(tǒng)運(yùn)行速度,從而更好地優(yōu)化CPU資源,可以帶來更高的性能。
線程搶占的局限性
盡管線程搶占是一個強(qiáng)大的工具,但并非所有編程環(huán)境都能充分利用它。例如,當(dāng)程序已經(jīng)使用了某些I/O操作時,線程搶占適用性會大大降低,因?yàn)樵谀承┎僮鲌?zhí)行期間,線程無法響應(yīng)操作系統(tǒng)的搶占任務(wù)。
此外,多線程程序的缺陷也可能與線程搶占有關(guān)。如果線程的優(yōu)先級無法正確設(shè)置,程序可能會在高負(fù)荷運(yùn)行期間出現(xiàn)死鎖或其他異常情況,而線程搶占僅是一個緩解這些問題的工具之一。
作為現(xiàn)代計(jì)算機(jī)編程的一部分,多線程程序運(yùn)行效率的提高一直是重要的挑戰(zhàn)。利用linux線程搶占機(jī)制,在多線程編程中實(shí)現(xiàn)對CPU時間的更好利用。無論是在高負(fù)載服務(wù)器還是高性能計(jì)算機(jī)環(huán)境中,都可以通過線程搶占來優(yōu)化系統(tǒng)性能和提高并發(fā)效率。但是,線程搶占不是萬能的,程序員必須謹(jǐn)慎處理線程的優(yōu)先級,才能充分發(fā)揮線程搶占的優(yōu)勢。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
嚴(yán)重關(guān)注:在嵌入試LINUX系統(tǒng)該使用哪個線程庫
嚴(yán)重關(guān)注: 在嵌入試LINUX系統(tǒng)該使用哪個線程庫?:30:02
分類: LINUX
在Redhat9.0下面, 創(chuàng)建一個進(jìn)程。getpid();得到進(jìn)程ID,然后在進(jìn)程里用pthreadcreate幾個線程,在線程里調(diào)用getpid, pthreadgetselfid()的到進(jìn)程ID和線程ID, 發(fā)現(xiàn)該線程的進(jìn)程ID和它所屬的進(jìn)程ID是一樣的, 線程ID卻逗罩不同。當(dāng)是在小機(jī)里用gcc里的線程庫,得到的結(jié)果是線程ID和進(jìn)程ID是不同的,即線程山拿鬧也當(dāng)作進(jìn)程來對待,而且多了幾個其它線程在運(yùn)行,若線程當(dāng)作進(jìn)程來對待效率是比較低的。在網(wǎng)上查了下linux的線程庫,發(fā)現(xiàn)新內(nèi)核中的LD用的是The Native POSIX Thread Library (NPTL), 而小機(jī)上用的是老的GCC里的線程庫。
如何在Redhat9上面用老的線程庫呢,在系統(tǒng)環(huán)境變量中加入LD_ASSUME_KERNEL=2.4.19就OK了
因?yàn)槔习姹緝?nèi)核中是不用NPTL庫的, 這樣LD連接程序的時候就不用NPTL, 在PC LINUX的
小機(jī)模擬器的模擬就和小機(jī)一樣不用NPTL了。
那么到底是不是該把小機(jī)的線程庫換成NPTL呢, 看看來自
的測試吧:
Linux 線程庫性能測試與分析
楊沙洲國防科技大學(xué)計(jì)算機(jī)學(xué)院
2023 年 7 月 01 日
NPTL 成為 glibc “正選”線程庫后,它的性能如何受到很多人的關(guān)注。本文就針對NPTL 與 LinuxThreads 的性能比較,以及超線程、內(nèi)核可搶占等特性對線程性能的影響進(jìn)行了全面評測。
一、 前言
在 Linux 2.6.x 內(nèi)核中,調(diào)度性能的改進(jìn)是其中最引人注目的一部分。NPTL(Native Posix Thread Library)使用內(nèi)核的新特性重寫敏游了 Linux 的線程庫,取代歷史悠久而備受爭議的 LinuxThreads 成為 glibc 的首選線程庫。
NPTL 的性能究竟如何?相對 LinuxThreads 又有哪些明顯的改進(jìn)?在對NPTL進(jìn)行全面分析之前,本文針對這兩種線程庫,以及內(nèi)核中”內(nèi)核可搶占”(Preemptible)和超線程(HyperThreading)等特性進(jìn)行了全面的性能評測,結(jié)果表明NPTL絕對值得廣大服務(wù)器系統(tǒng)期待和使用。
回頁首
二、 Benchmark
1. 測試平臺
進(jìn)行本測試的硬件平臺為浪潮NF420R服務(wù)器,4個Hyperthreading-enabled Intel Xeon 2.2G處理器,4G內(nèi)存。Linux選擇了Slackware 9.0發(fā)行版,所使用的內(nèi)核源碼來自
www.kernel.org
。
2. 針對測試:LMBench
lmbench是一個用于評價系統(tǒng)綜合性能的多平臺開源benchmark,但其中沒有對線程的支持。其中有兩個測試進(jìn)程性能的benchmark:lat_proc用于評測進(jìn)程創(chuàng)建和終止的性能,lat_ctx用于評測進(jìn)程切換的開銷。lmbench擁有良好的benchmark結(jié)構(gòu),只需要修改具體的Target程序(如lat_proc.c和lat_ctx.c),就可以借用lmbench的計(jì)時、統(tǒng)計(jì)系統(tǒng)得到我們關(guān)心的線程庫性能的數(shù)據(jù)。
基于lat_proc和lat_ctx的算法,本文實(shí)現(xiàn)了lat_thread和lat_thread_ctx兩個benchmark。在lat_thread中,lat_proc被改造成使用線程,用pthread_create()替代了fork(),用pthread_join()替代wait();在lat_thread_ctx中,沿用lat_ctx的評測算法(見lat_ctx手冊頁),將創(chuàng)建進(jìn)程的過程改寫為創(chuàng)建線程,仍然使用管道進(jìn)行通信和同步。
lat_thread null
null參數(shù)表示線程不進(jìn)行任何實(shí)際操作,創(chuàng)建后即刻返回。
lat_thread_ctx -s #threads
size參數(shù)與lat_ctx定義相同,可表示線程的大小(實(shí)際編程時為分配K數(shù)據(jù);#threads參數(shù)為線程數(shù),即參與令牌傳遞的線程總數(shù),相當(dāng)于程序負(fù)載情況。
3. 綜合測試:Volanomark
volanomark是一個純java的benchmark,專門用于測試系統(tǒng)調(diào)度器和線程環(huán)境的綜合性能,它建立一個模擬Client/Server方式的Java聊天室,通過獲取每秒平均發(fā)送的消息數(shù)來評測宿主機(jī)綜合性能(數(shù)值越大性能越好)。Volanomark測試與Java虛擬機(jī)平臺相關(guān),本文使用Sun Java SDK 1.4.2作為測試用Java平臺,Volanomark版本2.5.0.9。
回頁首
三、 測試結(jié)果
測試計(jì)劃中將內(nèi)核分為2.4.26、2.6.6/支持內(nèi)核搶占和2.6.6/不支持內(nèi)核搶占三類;通過配置內(nèi)核以及NF420R的BIOS實(shí)現(xiàn)三類P規(guī)模:單處理機(jī)(UP)、4CPU的P(P4)和打開超線程支持的虛擬8CPU P(P8*)。內(nèi)核配置和P規(guī)模的每一種組合都針對LinuxThreads和NPTL使用lat_thread、lat_thread_ctx和volanomark獲取一組數(shù)據(jù)。由于NPTL無法在2.4.x內(nèi)核上使用,該項(xiàng)數(shù)據(jù)空缺。
回頁首
四、 結(jié)果分析
1. LinuxThreads vs NPTL:線程創(chuàng)建/銷毀開銷
使用2.6.6/preemptible內(nèi)核配置下UP和P4的測試數(shù)據(jù)獲得下圖:
圖1
在線程創(chuàng)建/銷毀開銷方面,NPTL的改進(jìn)相當(dāng)明顯(降低約600%)。實(shí)際上,NPTL不再像LinuxThreads那樣需要使用用戶級的管理線程來維護(hù)線程的創(chuàng)建和銷毀,因此,很容易理解它在這方面的開銷能夠大幅度降低。
同時,由圖可見,單CPU下創(chuàng)建線程總是比多CPU下迅速。
2. LinuxThreads vs NPTL:線程切換開銷
同樣使用2.6.6/preemptible內(nèi)核配置下UP和P4的數(shù)據(jù):
圖2
隨著lat_thread_ctx的參與線程增多,不管是哪個線程庫,單處理機(jī)條件下的線程切換開銷都陡峭上升,而P條件下則上升比較平緩。在這方面,LinuxThreads和NPTL表現(xiàn)基本相同。
3. 內(nèi)核影響
圖3
圖4
圖5
圖6
從上面四張圖中我們可以得出兩點(diǎn)結(jié)論:
“內(nèi)核可搶占”是Linux對實(shí)時應(yīng)用提供更好支持的有力保障,但對線程性能影響很小,甚至有一點(diǎn)損失,畢竟搶占鎖的開銷不可忽略;
升級內(nèi)核并不會對LinuxThreads線程庫性能帶來多少變化,因此,對于服務(wù)器系統(tǒng)而言,不能指望僅僅編譯使用新內(nèi)核就能提高性能。
圖7
圖8
從圖3、圖4我們已經(jīng)知道,打開超線程支持對線程創(chuàng)建/銷毀性能幾乎沒有影響,而這兩張圖表也進(jìn)一步說明,超線程技術(shù)對于線程切換開銷也沒有明顯的影響。超線程技術(shù)是CPU內(nèi)部的優(yōu)化技術(shù),和真正的雙CPU完全不同。大量研究表明,如果沒有內(nèi)核與用戶應(yīng)用相結(jié)合的專門優(yōu)化措施,超線程并不會帶來很大的性能變化。除非是高負(fù)載綜合服務(wù)器系統(tǒng)(例如繁忙的數(shù)據(jù)庫系統(tǒng)),購買超線支持的CPU并不能帶來多少好處。
4. 綜合性能
圖9
圖9
前面幾節(jié)分析讓我們了解了線程庫性能改進(jìn)的細(xì)節(jié),通過volanomark測試,我們可以近似得到在綜合應(yīng)用環(huán)境下,特別是網(wǎng)絡(luò)服務(wù)需求中線程庫以及內(nèi)核對系統(tǒng)整體性能的影響程度。
圖9綜合了不同內(nèi)核、不同處理機(jī)數(shù)條件下,兩種線程庫的volanomark結(jié)果。從圖中可以觀察到以下三點(diǎn):
NPTL能極大提高P環(huán)境下服務(wù)器系統(tǒng)的整體性能(超過65%),相對而言,對單處理機(jī)系統(tǒng)影響較?。?0%左右);
2.6內(nèi)核的搶占特性對系統(tǒng)性能影響很?。ú怀^±1%),某些情況下甚至有所下降;
超線程技術(shù)在LinuxThreads中的影響是負(fù)面的,在NPTL中是正面的,但影響幅度都很?。?%-6%)。
關(guān)于linux線程搶占的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
四川成都云服務(wù)器租用托管【創(chuàng)新互聯(lián)】提供各地服務(wù)器租用,電信服務(wù)器托管、移動服務(wù)器托管、聯(lián)通服務(wù)器托管,云服務(wù)器虛擬主機(jī)租用。成都機(jī)房托管咨詢:13518219792
創(chuàng)新互聯(lián)(www.cdcxhl.com)擁有10多年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)、開啟建站+互聯(lián)網(wǎng)銷售服務(wù),與企業(yè)客戶共同成長,共創(chuàng)價值。
網(wǎng)站題目:Linux線程搶占:提高多線程運(yùn)行效率的利器(linux線程搶占)
文章鏈接:http://fisionsoft.com.cn/article/cddhpci.html


咨詢
建站咨詢
