2011-02-24 91 views
4

我一直在測試一些在C#中使用ThreadPool的代碼,我發現發生了很多不必要的上下文切換。當一個線程正在執行常規語句時,它將獲得上下文切換。他們似乎每一行都來回走動。我想知道這背後的邏輯是什麼。爲什麼一個線程會被切換到正常執行狀態?C#ThreadPool上下文切換邏輯

+2

你是怎麼注意到的? – 2011-02-24 11:25:38

+0

在visual studio上調試? – Aks 2011-02-24 11:26:21

+0

請不要生氣,但你很有趣。看到我的回答 – 2011-02-24 11:27:34

回答

4

線程應該同時執行,同時運行兩個線程。實際上,每個線程(在單個處理器計算機上)都會獲得有限的時間量(稱爲量子),這是在上下文切換之前執行的。這當然是一種過分簡化,但基本上這就是發生了什麼。

當你在調試器中運行兩個線程並逐步完成(這是我猜測你正在做的事情),逐句執行每個語句的行爲會導致它超出線程執行的時間,一個上下文切換回另一個線程。

2

在調試時逐句通過代碼時,每行都比正常執行時的WAY長。這就是爲什麼有這麼多的上下文切換。通常情況下,它們每秒發生多次。