У меня есть приложение в режиме реального времени .NET в режиме реального времени на W2008R2.Есть ли простая и сознательная диаграмма/алгоритм планирования потоков?
Я только понял, что я не могу объяснить, как точно планируются потоки.
И для моего embarassement я не знаю, как это работает вплоть до потоков ОС.
Поэтому я объясню, что я знаю, и я был бы признателен, если бы кто-нибудь мог помочь мне заполнить пробелы и передать мне простое описание алгоритмов, которые используются в .NET и Windows для планирования потоков.
Мой код работает в управляемых потоках. Поскольку я знаю управляемые потоки (разрешает их использовать потоки .NET), запускаются в неуправляемых потоках (позволяет называть их потоками ОС).
Я знаю, что потоки конкурируют за процессорное время и другие ресурсы. И что есть часть программного обеспечения - планировщик, который контролирует ресурсы и потоки и заставляет все это работать.
Здесь я не уверен - это планировщик только один для ОС или есть также планировщик .NET, который планирует потоки .NET? И если есть два планировщика, то как они работают вместе?
И каковы правила для планирования потока?
Я хочу сузить этот вопрос до потока, который выполняет только арифметические вычисления и не имеет доступа к каким-либо устройствам, поэтому мы говорим исключительно о потреблении процессора.
Как планировщик определяет приоритет потока .NET, приоритет процесса и общий ресурс (в данном случае CPU)?
Stephen Я очень люблю таких парней, как Руссинович и Даффи, но читать 2 толстые книги, чтобы понять, как потоки запланированы .... Я уверен, что планировщик использует очень простые правила. То есть если поток имеет priotiry X, и он сигнализирует READY, и есть доступное ядро центрального процессора, и нет потоков READY с приоритетом> X, тогда запустите этот поток .... –
Кроме того, .NET 4.0 обеспечивает улучшенный ThreadPool, который позволяет пулу иметь это собственный (возможно, определенный пользователем) планировщик заданий. Тем не менее, я считаю, что это относится только к запуску новых потоков, а не к управлению запущенными (я мог ошибаться в этом), и как только поток работает, он работает под планировщиком потоков ОС. –
@Bobb: На самом деле, планирование потоков довольно сложно. Я рекомендую Windows Internals для обзора (например, «жесткие» и «мягкие» приоритеты потоков) и CPoW для деталей. –