Я имею в виду операционную систему Windows 10, но я считаю, что ответ может быть независимым от ОС.

В Windows уровень приоритета в реальном времени является самым высоким уровнем приоритета, например, для обработки ввода с клавиатуры и мыши.

Из того, что я прочитал в Интернете:

Установка ресурсоемкого процесса в режиме реального времени означает, что клавиатура и мышь перестанут отвечать на запросы, поскольку ОС не получит достаточно времени ЦП для обработки этих входных данных.

По сути, процесс с приоритетом в реальном времени будет выполняться без передачи ЦП другим процессам, даже диспетчеру задач. Если что-то пойдет не так, вы не сможете это остановить.

Посмотрите, например, этот пост Microsoft: когда вы устанавливаете программу на 100% CPU в режиме реального времени, вы получаете то, что просили.

Вопрос:

Поэтому все это заставляет меня бояться проверять этот уровень приоритета на моей машине, поэтому я задаю этот вопрос, а не пробую сам. Кроме того, теоретический ответ кажется более перспективным, чем попытка с игрушечным сценарием.

Если я запускаю однопоточный процесс с приоритетом в реальном времени, я понимаю, что он будет выполняться без остановки до его завершения. Но если у меня будет второе ядро, смогу ли я использовать свой ПК, пока этот процесс работает, благодаря этому второму ядру?

Если да, то это имеет практическое применение. Я могу запустить вычислительную задачу, результат которой мне нужно как можно скорее, на одном ядре, но при этом я могу использовать свой компьютер с другим ядром.

2 ответа2

1

По сути, в режиме реального времени это очень важный приоритет, и его не следует делать без необходимости. Это связано с тем, что если вы пытаетесь ускорить процесс, который будет использовать все доступные ресурсы, тогда будут выполняться даже базовые процессы (как вы упомянули клавиатуру и мышь). Это может затруднить остановку жадного процесса.

В идеале вы должны использовать что-то для распределения ядер, а не для приоритета. Приоритет влияет на весь процессор. Если, например, использовать VBox, установка большего количества потоков будет гораздо более эффективной для многозадачности и одновременного ее использования, чем установка приоритета.

TL; DR Если многозадачность с задачами, интенсивно использующими процессор, выделите ядра для задач и не переопределяйте приоритет в реальном времени. При необходимости может помочь использование виртуализации для сегментации ресурсов.

1

Если я запускаю однопоточный процесс с приоритетом в реальном времени, я понимаю, что он будет выполняться без остановки до его завершения.

Это преувеличение. Есть несколько вещей, которые делают это неправдой:

  1. То, что вы видите в диспетчере задач как "приоритет в реальном времени", на самом деле представляет собой диапазон приоритетов, к которым могут обращаться потоки процесса. Потоки одного процесса "реального времени" могут иметь более высокие приоритеты, чем потоки другого процесса "реального времени". Смотрите мой ответ здесь. Тем не менее, все приоритеты в классе "реального времени" выше, чем любой из приоритетов во всех других классах.

  2. Большинство потоков не тратят весь свой код на процессор, поэтому они не будут использовать 100% процессора независимо от их приоритета. У большинства потоков есть повод время от времени ждать. Обычно они ожидают завершения ввода-вывода, устранения неполадки с жесткой страницей или какого-либо другого потока, указывающего на то, что им больше не нужно ждать. (Другой поток может быть в том же процессе или в другом.)

  3. Первые этапы обработки прерываний от аппаратных устройств (включая прерывания от часов реального времени) происходят независимо от какого - либо основанного на потоке кода. Этот материал не имеет "приоритета", так как приоритет является атрибутом потока, но прерывания не обрабатываются потоками. Они имеют приоритет над кодом, основанным на потоке, независимо от приоритета последнего. Вы можете увидеть время, используемое этим компонентом как "Системные прерывания" на вкладке "Сведения" в диспетчере задач Windows 10.

Класс приоритета в реальном времени отличается от других классов приоритета следующими способами:

  1. Это более высокий приоритет, чем все другие приоритетные классы (конечно).

  2. Потоки процессов в этом классе не получают свои приоритеты автоматически регулируемыми в зависимости от их недавней активности, как это делают потоки процессов в других классах по умолчанию. (Настройка приоритета потока может быть отключена и включена программно, но по умолчанию она включена для процессов не в реальном времени.)

Но если у меня будет второе ядро, смогу ли я использовать свой ПК, пока этот процесс работает, благодаря этому второму ядру?

Наверное. На самом деле это так, даже если у вас есть только одно ядро с включенной гиперпоточностью.

Правильное использование класса приоритета в реальном времени НЕ для процесса, интенсивно использующего процессор. Скорее мы используем высокие приоритеты для задач, которые должны быстро реагировать на события. Интенсивная работа на базе ЦП в ответ на эти события должна выполняться с низкими приоритетами, в идеале ниже "нормального", чтобы не мешать интерактивным пользователям.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .