當使用線程在C編程時,在Linux shell中,我試圖減少線程開銷,基本上降低CPU時間(並使其更有效)。線程開銷性能
現在在程序中,很多線程正在創建,需要在終止之前完成一項工作。由於相互排斥,只有一個線程可以同時完成這項工作。
我知道它開始前
其他線程必須等待有一個線程做這項工作線程需要多長時間才能完成的工作。他們檢查他們是否可以完成這項工作的方式是如果滿足一個條件變量。
對於等待的線程,如果它們等待使用條件變量,使用該特定的代碼來等待(在A,B,c和d是隻是任意的東西,這僅僅是一個例子):
while (a == b || c != d){
pthread_cond_wait(&open, &mylock);
}
這個效率如何? pthread_cond_wait
代碼中發生了什麼?它是否是一個持續檢查條件變量的while循環(幕後)?
此外,由於我知道線程需要多長時間工作,因此我首先強制執行有關最短作業的調度策略,這會更有效嗎?或者這並不重要,因爲在執行這項工作的任何線程組合中,程序將花費相同的時間完成。換句話說,是否使用最短的工作首先降低了CPU等待的其他線程的CPU開銷?由於最短的工作首先似乎減少了等待時間。
你可以重寫你的問題,使之clearar?此外,你想知道不使用互斥體,只是手動調節的東西? – speeder 2013-02-24 02:00:58
您需要閱讀操作系統教科書。 Condvars和其他同步機制不是while()循環,高效的多線程設計非常難以避免同步,或者如果不可避免的話,儘量減少它的跨度。您正在嘗試運行b4步行。 – 2013-02-24 02:01:23
好吧我試圖讓它更清晰(我編輯了上面的問題)。所以基本上我問的是,如果我使用調度策略先做最短的工作,那麼應該儘量減少沒有完成工作的線程的等待時間。正因爲如此,這是否意味着整體CPU時間減少,因爲總的等待時間縮短了?由於任何類型的等待仍然會使用一定數量的CPU時間嗎? – omega 2013-02-24 02:07:33