Планирование задач в многопоточности

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

Я сомневаюсь, как установить порог для потоков.

0

Решение

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

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.38.8905

1

Другие решения

Какую библиотеку потоков вы используете?

Я использую две библиотеки OSS во всех моих проектах потоков TBB и Cilk Plus. Одна особенность, которую обеспечивают эти среды выполнения более высокого уровня, заключается в том, что они автоматически планируют задачи для потоков таким образом, чтобы эффективно использовать ресурсы процессора. Среды выполнения также очень эффективны при балансировке нагрузки для многих задач.

www.threadingbuildblocks.org

www.cilkplus.org

0

По вопросам рекламы [email protected]