Я запускаю процесс, потребляющий ЦП (вычисляем набор Мандельброта), и этот процесс занимает почти 100% ЦП (на моей машине 8 ядер). когда я изменяю сродство к половине ядер, загрузка процессора показывает 50% или ниже, и это круто, но я хочу понять, как происходит это волшебство:

мой вопрос: если я изменю сродство во время работы процесса и на отключенных ядрах появятся потоки - это безопасно, что я не потеряю данные? как это делается?

4 ответа4

3

Хотя это и не было специально задано, я должен указать (поскольку я загружаю все свои ядра по несколько недель за раз, поэтому немного знаком с этим предметом), что Affinity, хотя и может быть полезной, не так важна, как Priority. Ваши задания обычно заканчиваются в два раза быстрее при 100%, по сравнению с 50% использованием ЦП. Установите для долго выполняющихся задач низкий приоритет, и они будут по-прежнему работать на 100% (если не требуется выполнение ничего с более высоким приоритетом), но это минимизирует влияние на выполнение других легких задач. Управляйте Affinity только в том случае, если есть проблемы с шумом / температурой вентилятора, которые вам необходимо решить ... пылесосить мой ПК периодически дает мне больше пробега в этом случае.

3

У вас 8 процессорных ядер, но, безусловно, запущено более 8 потоков. Просто посчитайте все фоновые процессы - их, вероятно, несколько десятков, каждый из которых имеет хотя бы один поток. Операционная система должна как-то с этим справляться, чтобы обеспечить настоящую многозадачность. Таким образом, в ОС есть планировщик, который запускает, приостанавливает и перезапускает потоки в соответствии с некоторым алгоритмом и некоторым набором параметров. Сходство является одним из таких параметров, оно определяет, на каких ядрах может быть запланирован поток. Приостановка и перезапуск потоков происходит постоянно. То же самое происходит с перемещением их между ядрами (ОС пытается составить расписание на тех же ядрах, потому что это уменьшает частоту пропадания кэша и увеличивает производительность). Это безопасно.

1

Здесь нет абсолютно никакого положительного риска потери данных (или повреждения данных). Или прекращения процесса или любой другой проблемы. Планировщик Windows обрабатывает эту ситуацию десятки или даже сотни раз в секунду.

Изменение сходства процесса (или изменение его приоритета в этом отношении) - которое действительно меняет сходство (и приоритеты) потоков процесса - является еще одной причиной вытеснения.

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

1

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

Однако, если программа была написана плохо, или компилятор, из которого она была сделана, имел некоторые проблемы или ошибки, программа могла работать неправильно или полностью зависать.

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