c# - 是否有关于线程调度的简单而有意识的图表/算法?

标签 c# windows multithreading .net-4.0

我在 W2008R2 上运行了软实时 .NET 应用程序。

我刚刚意识到我无法解释线程的调度精度。

令我尴尬的是,我根本不知道操作系统线程是如何工作的。

因此,我将解释我所知道的,如果有人可以帮助我填补空白并向我介绍 .NET 和 Windows 中用于调度线程的算法的简单描述,我将不胜感激。

我的代码在托管线程中运行。据我所知,托管线程(我们称它们为 .NET 线程)在非托管线程(我们称它们为 OS 线程)中运行。

我知道线程在争夺 CPU 时间和其他资源。并且有一个软件 - 调度程序,它监视资源和线程并使整个事情正常运行。

在这里我不确定 - 调度程序只是用于操作系统的调度程序还是还有调度 .NET 线程的 .NET 调度程序?如果有两个调度程序,那么它们如何协同工作?

调度线程的规则是什么?

我想将这个问题缩小到一个线程,它只进行算术计算而不访问任何设备,所以我们谈论的是纯粹的 CPU 消耗线程。

调度程序如何影响 .NET 线程优先级、进程优先级和共享资源(在本例中为 CPU)?

最佳答案

当前版本的 .NET 桌面运行时在 .NET 线程和操作系统线程之间确实有 1:1 的映射。这可能会在未来的版本中发生变化(在其他主机中可能并非如此;我知道在 AutoCAD 中并非如此,但我相信在 SQL Server 和 MS Office 中是这样)。

请注意,.NET 线程与操作系统线程池不同(尽管它确实使用了一个进程范围的 I/O 完成端口,它具有一些类似于池的语义) .

要获得完整的答案,您需要两本书:Windows InternalsConcurrent Programming on Windows .我建议按此顺序阅读它们。

关于c# - 是否有关于线程调度的简单而有意识的图表/算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3077716/

相关文章:

C# goto use - 这里还有什么用?

c# - 从 HttpMethod POST 切换到 Get 时 ASPX 丢失 session

windows - 是否可以在 Windows 中列出命名事件?

c - Windows 中 char * 和 LPSTR 的区别

c - 使用 pdcurses 显示重音字符

c++ - 如何在 C++11 中创建线程对象数组?

c# - Xamarin:实例化 Xamarin.Droid 或 Xamarin.iOS 类

c++ - 如何在pthread线程中创建memcpy?

C-用户级线程库示例

c# - 404 拒绝 UrlScan 删除请求