我對sched_yield
函數有幾個問題,因爲我看到它在我的代碼中無法正常工作。很多時候,我發現同一個線程一次又一次地運行,即使在其他線程的情況下,當我試圖通過調用sched_yield
來讓出它時。sched_yield的行爲
另外如果我有多核,所有內核或只有一個內核上運行的線程的產量將爲sched_yield
。例如,我在線程1上運行線程1,2和3,在線程2上運行線程4,5和6,如果從線程2調用sched_yield
,它將被線程1和3替換,還是僅替換爲1,3, 4,5和6都可能嗎?我在問這個問題,因爲在.Net Thread.Yield
中,對於在同一核心/處理器上運行的線程只會產生收益。
你打算如何運作? TBH,我不太明白爲什麼這個調用是有用的,無論是POSIX/*** X,Windows還是任何搶先式多任務處理器。如果你產生你的線程,你不能保證操作系統不會立即重新加載它,如果其他線程當時還沒有準備好,它們可能在同一個核心上。如果.NET版本具有處理器親和性(是的,我使用了它,它看起來像它),這甚至更奇怪 - 我想這可能會提高光纖性能? – 2011-06-15 13:43:08
@MartinJames當你擁有比內核更多的可運行進程/線程,並且你想讓其他線程/進程有機會取得進展時(例如,一個線程剛剛給出了另一個線程要做的事情以及第一個線程在睡眠中等待完成比第二個線程執行「something」+第一個線程檢查它已完成)的成本要多 – jhfrontz 2013-11-27 13:55:42