如果我有一個進程的所有線程都在不同的內核上運行,那麼sched_yield
會在這種情況下執行什麼操作?放棄並立即發佈?因爲我看到的是sched_yield
不會導致線程調用它,所以請等待任何循環,看起來這個調用甚至不會進入內核。sched_yield在這種情況下做什麼?
2
A
回答
3
手冊頁說:
如果調用線程處於當時的最高優先級 列表中唯一的線程,它會繼續呼叫後運行至SCHED_YIELD()。
所以,如果沒有什麼更重要的運行,該功能將基本上什麼都不做。
3
就linux內核而言,一個核心就是一個CPU,所以sched_yield
會導致調用線程放棄CPU,但如果線程是隊列中唯一的線程,它不會等待任何週期。
所以是你的情況sched_yield
將立刻返回立刻如果沒有線程等待當前的核心。
請注意,sched_yield
是而不是旨在控制如何在多個CPU上運行線程。
+0
但是我們會在這裏進行系統調用嗎?對? – MetallicPriest 2013-04-25 14:07:23
+0
sched_yield **是一個系統調用,C實現只不過是類似'_syscall0(int,sched_yield)'的東西' – zakinster 2013-04-25 14:12:39
相關問題
- 1. 「:」在這種情況下做什麼?
- 2. *在這種情況下做什麼?:
- 3. .map()在這種情況下做什麼?
- 4. 什麼是光標,它在做什麼(在這種情況下)?
- 5. 爲什麼QWebFrame :: evalutateJavaScript在這種情況下什麼都不做?
- 6. 爲什麼在這三種情況下
- 7. 有什麼用在這種情況下
- 8. 什麼是在這種情況下
- 9. 爲什麼在這種情況下
- 10. 什麼是在這種情況下
- 11. 什麼在這種情況下
- 12. 爲什麼在這種情況下
- 13. 在這種情況下,<Perl在做什麼?
- 14. 在這種情況下,ko.observable究竟在做什麼?
- 15. 在這種情況下,自己做了什麼?
- 16. 我在這兩種情況下做了什麼不同?
- 17. 與做,而爲什麼在這種情況下值的變化?
- 18. 垃圾收集器在這種情況下會做什麼?
- 19. 在這種情況下,Ext.Callback會做什麼?
- 20. 在這種情況下,dup2實際上做了什麼?
- 21. 什麼是做一個SQL在這種情況下
- 22. 3PC在這種情況下會做什麼?
- 23. 我在這種情況下做錯了什麼?
- 24. 在這種情況下,「重新加載」是做什麼的?
- 25. 在這種情況下for =「power」會做什麼?
- 26. 冒號操作符在這種情況下做了什麼?
- 27. 什麼是python .get()方法在這種情況下正在做什麼?
- 28. 這種情況下最好的做法是什麼?
- 29. 這種情況下最好的情況是什麼?
- 30. 什麼是wrapper_descriptor,在這種情況下爲什麼是Foo .__ init __()?
「所以如果沒有什麼更重要的運行,功能基本上什麼都不會做。」但是它會做一個系統調用(然後從用戶空間切換到內核),甚至不是? – MetallicPriest 2013-04-25 14:03:32
是的,它仍然會執行系統調用,檢查CPU調度程序的等待列表,並返回而不等待是否沒有其他正在等待的線程。 – zakinster 2013-04-25 14:07:45
嗯,我現在沒有Linux來測試,所以也許你可以創建一個程序,在循環中調用sched_yield並對其進行配置? – 2013-04-25 14:08:02