C # Когда управляемый поток заканчивает свой временной интервал, произойдет ли переключение контекста? - PullRequest
3 голосов
/ 20 июня 2010

В книге Руссиновича говорится, что потоку (ПРИМЕЧАНИЕ: речь идет о потоке ОС) потребуется диспетчеризация (планирование), если он a) стал готовым b) завершил свой временной интервал, выходы или блоки.

В приложении реального времени на C # есть управляемый поток, для которого очень важно добиться как можно меньшего числа переключений контекста.

Этот поток имеет наивысший приоритет, а процесс имеет приоритет RealTime, что делает мой приоритет ОС потока 26 из 31.

Что произойдет с моим потоком, когда он завершит свой временной интервал, а нет ожидающих потоков с приоритетом> = 26?

Будет ли переключение контекста, чтобы перепланировать мой поток для повторного запуска, или переключение контекста будет предотвращено, и поток будет работать непрерывно?

Если произойдет переключение контекста - может кто-нибудь сказать сколько циклов ЦП занимает в среднем ?

Я бы оценил простые и окончательные ответы!

Спасибо!

1 Ответ

4 голосов
/ 21 июня 2010

Как вы могли бы сделать приложение в реальном времени на ОС не реального времени? Вот информация об ОС реального времени

Если ваш поток имеет максимальный приоритет, вы можете получить не отвечающую систему (http://blogs.msdn.com/b/oldnewthing/archive/2010/06/10/10022675.aspx)

Что будет с моей веткой когда он заканчивает свой временной интервал и там нет ожидающих потоков с приоритетом> = 26?

Если нет других потоков с таким же или более высоким приоритетом, и ваш поток не блокирует (спящий режим, ожидание и т. Д.) - тогда система перепланирует его с новым временным интервалом.

Из MSDN article : "Система рассматривает все потоки с одинаковым приоритетом как равные. Система назначает интервалы времени циклическим образом всем потокам с наивысшим приоритетом. Если ни один из этих потоков готовы к работе, система назначает временные интервалы циклически для всех потоков со следующим наивысшим приоритетом. Если поток с более высоким приоритетом становится доступным для запуска, система прекращает выполнение потока с более низким приоритетом (без разрешения завершить использование своего временного интервала) и назначить полный временной интервал потоку с более высоким приоритетом "

Будет ли переключение контекста на перенесите мою ветку для повторного запуска или переключение контекста будет исключено, а поток будет работать непрерывно?

Переключение контекста произойдет, когда поток перейдет в режим ядра (блоки, спит) Вы можете предотвратить переключение контекста потока с помощью Thread.SpinWait.

Если будет переключение контекста - можно кто нибудь подскажет сколько процессоров у него циклов занимает в среднем?

Предполагая, что переключение контекста инициируется прерыванием, издержки переключения с уровня пользователя на уровень ядра на (2,8 ГГц) P4 составляют 1348 циклов, на (200 МГц) P2 227 циклов. Почему большая разница в циклах? Похоже, что P4 сбрасывает свой микрооперационный кеш как часть обработки прерывания (некоторые подробности о микрооперационном кеше можно найти на arstechnica.com). Считая фактическое время, P4 берет 481 нс, а P2 1335 нс.

Возврат с уровня ядра на уровень пользователя обойдется вам в 923 цикла (330 нс) на P4, 180 циклов (900 нс) на P2.

Накладные расходы на хранение / восстановление регистров (без учета каких-либо накладных расходов TLB / без учета стоимости сохранения / восстановления регистров FPU) составляют 188 циклов на P4 (67 нс), 79 циклов на P2 (395 нс). (взято из здесь )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...