C#ThreadPool上下文切换逻辑

时间:2011-02-24 11:22:39

标签: c#

我一直在测试一些在C#中使用ThreadPool的代码,我注意到发生了很多不必要的上下文切换。当一个线程正在执行常规语句时,它会被上下文切换。从字面上看,它们似乎每条线都来回走动。我想知道这背后的逻辑是什么。为什么一个线程会被关闭以进行常规执行?

2 个答案:

答案 0 :(得分:4)

线程应该同时执行,“同时”运行两个线程。实际上,每个线程(在单个处理器计算机上)获得有限的时间(称为量子),该时间在上下文切换之前执行。当然,这是一个粗略的过度简化,但基本上就是这样。

当您在调试器中运行两个线程并逐步执行时(我猜你正在做的事情),逐步执行每个语句的行为会导致它超过线程执行的时间,并且您得到一个上下文切换回另一个线程。

答案 1 :(得分:2)

在调试过程中逐步执行代码时,每行的使用时间比正常执行时长。这就是为什么有这么多的上下文切换。通常,它们每秒发生多次。