2010-06-20 4 views
2

У меня есть приложение в режиме реального времени .NET в режиме реального времени на W2008R2.Есть ли простая и сознательная диаграмма/алгоритм планирования потоков?

Я только понял, что я не могу объяснить, как точно планируются потоки.

И для моего embarassement я не знаю, как это работает вплоть до потоков ОС.

Поэтому я объясню, что я знаю, и я был бы признателен, если бы кто-нибудь мог помочь мне заполнить пробелы и передать мне простое описание алгоритмов, которые используются в .NET и Windows для планирования потоков.

Мой код работает в управляемых потоках. Поскольку я знаю управляемые потоки (разрешает их использовать потоки .NET), запускаются в неуправляемых потоках (позволяет называть их потоками ОС).

Я знаю, что потоки конкурируют за процессорное время и другие ресурсы. И что есть часть программного обеспечения - планировщик, который контролирует ресурсы и потоки и заставляет все это работать.

Здесь я не уверен - это планировщик только один для ОС или есть также планировщик .NET, который планирует потоки .NET? И если есть два планировщика, то как они работают вместе?

И каковы правила для планирования потока?

Я хочу сузить этот вопрос до потока, который выполняет только арифметические вычисления и не имеет доступа к каким-либо устройствам, поэтому мы говорим исключительно о потреблении процессора.

Как планировщик определяет приоритет потока .NET, приоритет процесса и общий ресурс (в данном случае CPU)?

ответ

1

Текущие версии среды выполнения .NET для настольных компьютеров имеют сопоставление 1: 1 между потоками .NET и потоками ОС. Это может измениться в будущих версиях (и может быть неверным в других хостах, я знаю, что это не так в AutoCAD, но я считаю, что это верно в SQL Server и MS Office).

Обратите внимание, что пул .NET пул отличается от пула потоков ОС (хотя он использует один сквозной порт ввода-вывода для всей системы, который имеет некоторую семантику, подобную пулу).

Для получения полных и полных ответов вам понадобятся две книги: Windows Internals и Concurrent Programming on Windows. Я рекомендую читать их в этом порядке.

+0

Stephen Я очень люблю таких парней, как Руссинович и Даффи, но читать 2 толстые книги, чтобы понять, как потоки запланированы .... Я уверен, что планировщик использует очень простые правила. То есть если поток имеет priotiry X, и он сигнализирует READY, и есть доступное ядро ​​центрального процессора, и нет потоков READY с приоритетом> X, тогда запустите этот поток .... –

+0

Кроме того, .NET 4.0 обеспечивает улучшенный ThreadPool, который позволяет пулу иметь это собственный (возможно, определенный пользователем) планировщик заданий. Тем не менее, я считаю, что это относится только к запуску новых потоков, а не к управлению запущенными (я мог ошибаться в этом), и как только поток работает, он работает под планировщиком потоков ОС. –

+0

@Bobb: На самом деле, планирование потоков довольно сложно. Я рекомендую Windows Internals для обзора (например, «жесткие» и «мягкие» приоритеты потоков) и CPoW для деталей. –

Смежные вопросы