我一直在测试一些在C#中使用ThreadPool
的代码,我注意到发生了很多不必要的上下文切换。当一个线程正在执行常规语句时,它会被上下文切换。从字面上看,它们似乎每条线都来回走动。我想知道这背后的逻辑是什么。为什么一个线程会被关闭以进行常规执行?
答案 0 :(得分:4)
线程应该同时执行,“同时”运行两个线程。实际上,每个线程(在单个处理器计算机上)获得有限的时间(称为量子),该时间在上下文切换之前执行。当然,这是一个粗略的过度简化,但基本上就是这样。
当您在调试器中运行两个线程并逐步执行时(我猜你正在做的事情),逐步执行每个语句的行为会导致它超过线程执行的时间,并且您得到一个上下文切换回另一个线程。
答案 1 :(得分:2)
在调试过程中逐步执行代码时,每行的使用时间比正常执行时长。这就是为什么有这么多的上下文切换。通常,它们每秒发生多次。