Перемещение.NET потоков между ядрами

Jonathan Shewchuk библиотека Triangle феноменален; я использовал его для автоматизации триангуляции в прошлом. Можно попросить, чтобы это попыталось избежать маленьких/узких треугольников, и т.д., таким образом, Вы придумываете "хорошие" триангуляции вместо просто любой триангуляции.

9
задан Community 23 May 2017 в 12:11
поделиться

4 ответа

Это не похоже на то, что поток живет на определенном ядре, а это процесс перемещения его на другое.

Операционная система просто имеет список потоки (и / или процессы), которые готовы к выполнению и будут отправлять их на любое ядро ​​/ процессор, которое окажется доступным.

Тем не менее, любой интеллектуальный планировщик попытается запланировать поток на том же ядре, насколько это возможно. - просто для повышения производительности (данные с большей вероятностью будут в кеше этого ядра и т. д.)

6
ответ дан 4 December 2019 в 19:35
поделиться

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

Почти. То, что вы описываете, называется кооперативной многозадачностью , при которой потоки, как ожидается, будут регулярно возвращать выполнение обратно планировщику (например, проживая только короткое время или регулярно вызывая Thread.Current.Sleep (0) ). Это не то, как работает современная потребительская операционная система, потому что один неконтролируемый поток-мошенник может перегружать процессор в такой системе.

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

Когда в системе более одного ЦП или несколько ядер ЦП, то же самое происходит с каждым ядром. Выполнение на каждом ядре регулярно приостанавливается, и планировщик решает, какой поток запустить на нем следующим. Поскольку каждое ядро ​​ЦП имеет одинаковые регистры, планировщик может и будет перемещать поток между ядрами, пытаясь справедливо распределить временные интервалы.

2
ответ дан 4 December 2019 в 19:35
поделиться

Windows предоставляет API для установки сходства потоков (т.е. для установки процессоров, для которых этот поток должен быть запланирован). В таком API не будет необходимости, если поток всегда выполняется на одном ядре.

1
ответ дан 4 December 2019 в 19:35
поделиться

В MSDN есть несколько статей, которые, вероятно, помогут прояснить некоторые вещи: Приоритеты планирования и Несколько Процессоры .

Выдержка (приоритеты планирования):

Запланировано выполнение потоков на основе их приоритет планирования. Каждый поток назначается приоритет планирования. В уровни приоритета от нуля (низший приоритет) до 31 (высший приоритет). Только ветка нулевой страницы может иметь нулевой приоритет. (The поток нулевой страницы - это системный поток отвечает за обнуление любых свободных страниц когда нет других потоков, которые необходимо запустить.)

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

А в отношении нескольких процессоров:

Компьютеры с несколькими процессорами обычно проектируются для одной из двух архитектур: неравномерный доступ к памяти (NUMA) или симметричная многопроцессорная обработка (SMP).

] В компьютере с NUMA каждый процессор ближе к некоторым частям памяти, чем к другим, что делает доступ к памяти для одних частей быстрее, чем для других. В модели NUMA система пытается запланировать потоки на процессорах, близких к используемой памяти. Для получения дополнительной информации о NUMA см. Поддержка NUMA.

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

3
ответ дан 4 December 2019 в 19:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: