Sleep 0 及其使用場景

2021-06-07 00:51:15 字數 659 閱讀 9354

sleep(n)的作用是讓當前執行緒睡眠n毫秒,以便執行其他執行緒,如果沒有其他執行緒,那睡眠n毫秒後,繼續執行。

而如果n=0,sleep(0)是指cpu交出當前執行緒的執行權,讓cpu去執行其他執行緒。也就是放棄當前執行緒的時間片,轉而執行其他執行緒。

那麼,sleep(0)應該在那種情況下使用? 一般來說,如果當前執行緒比較耗時比較佔cpu資源,可以在結尾處加上sleep(0), 這樣效率會得到大大的提高。

void setcopyfile(short progress)}

如上**,由於該**處於乙個多執行緒執行的環境中,而拷貝progress又是不停的進行,不斷地呼叫postmessage()函式,同時還要做訊息對映,執行訊息相應函式等等,因此這是乙個比較耗時的過程,此時,sleep(0)就派上用場了,加在後面,讓其他執行緒也能及時得到執行。

sleep(0)

然而在我換上了雙核cpu後,問題出來了:sleep(0)經常會比預期中更早返回。當初的設計**根本沒有考慮過多核/多cpu方式下的執行緒排程。

看來,速度和方便,還是難以兩全其美。如果資料對同步敏感,還是不能偷工減料。

另外,在測試中發現非常奇怪的一點: 當執行緒池工作的時候,在任務管理器裡設定該程序只能在乙個cpu上執行的時候,該進城所占用的記憶體量急劇持續增長。而再設回允許在雙核下排程時,記憶體量又開始緩慢持續減少^_^

Sleep 0 及其使用場景

sleep n 的作用是讓當前執行緒睡眠n毫秒,以便執行其他執行緒,如果沒有其他執行緒,那睡眠n毫秒後,繼續執行。而如果n 0,sleep 0 是指cpu交出當前執行緒的執行權,讓cpu去執行其他執行緒。也就是放棄當前執行緒的時間片,轉而執行其他執行緒。那麼,sleep 0 應該在那種情況下使用?一...

Sleep 0 及其使用場景

sleep n 的作用是讓當前執行緒睡眠n毫秒,以便執行其他執行緒,如果沒有其他執行緒,那睡眠n毫秒後,繼續執行。而如果n 0,sleep 0 是指cpu交出當前執行緒的執行權,讓cpu去執行其他執行緒。也就是放棄當前執行緒的時間片,轉而執行其他執行緒。那麼,sleep 0 應該在那種情況下使用?一...

Sleep 0 及其使用場景

sleep n 的作用是讓當前執行緒睡眠n毫秒,以便執行其他執行緒,如果沒有其他執行緒,那睡眠n毫秒後,繼續執行。而如果n 0,sleep 0 是指cpu交出當前執行緒的執行權,讓cpu去執行其他執行緒。也就是放棄當前執行緒的時間片,轉而執行其他執行緒。那麼,sleep 0 應該在那種情況下使用?一...