Sql-Server
是什麼導致 SQL Server 工作執行緒自願讓步
我正在閱讀有關 SOS_SCHEDULER_YIELD 的內容,並且在閱讀了大量有關內部結構(如時鐘間隔、執行緒和量子)的內容後,我對它的工作原理有了很好的理解。
但是還有一個基本問題困擾著我——為什麼工作執行緒會在 4ms 量子之後自願讓出處理器?根據我的理解,因為它是非搶先的:
如果它正在執行,它應該完成任務
如果它需要資源,它將返回等待隊列。
這不像執行緒每 4 毫秒在 RUNNING 和 RUNNABLE 狀態之間跳轉,對吧?但正如我們所知,在某些情況下它會產生效果,我不確定為什麼會發生這種情況。在決定將其從 RUNNING 狀態中刪除時,執行緒發生了什麼。
編輯:我意識到有很多關於這種等待類型的問題,但我現在不考慮故障排除,而是我想了解什麼可以使假設的執行執行緒產生 CPU。
您可能知道,每個核心有一個調度程序。調度程序決定“誰下一個”。
調度程序上的所有工作人員都被定義為作業系統不被執行,除了一個。可行的是“擁有”核心的人。我們仍然在作業系統中進行搶先式多任務處理,但是作業系統只允許調度一個執行緒(每個核心)。即,SQL Server 希望控制可以使用 CPU 的執行緒。
那麼,我們如何從擁有(活動)執行緒切換到任何非活動執行緒?它是否應該在這 5 分鐘 CPU 密集型的東西執行時完成它的查詢/任務並且讓所有其他人不做任何事情?我們不希望這樣,這就是它在 4 毫秒後產生的原因,因此調度程序可以決定下一步該做什麼。