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

Я привлекал различные алгоритмы планирования по делу о пуле потоков, который я реализую. Из-за природы проблемы, которую я решаю, я могу предположить, что задачи, выполняемые параллельно, независимы и не порождают новых задач. Задачи могут иметь переменные размеры.

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

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

NB. Этот вопрос объединяется с предыдущим вопросом.

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

1 ответ

Я бы распределил задачи заранее. Имея информацию о предполагаемом времени их выполнения, можно распределить их по отдельным очередям, для каждого потока по одной.

Распределение задач - это, по сути, проблема ранца, каждая очередь должна занимать одинаковое количество времени.

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

2
ответ дан 4 December 2019 в 04:21
поделиться
Другие вопросы по тегам:

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