Я пытаюсь планировать задачи в многопоточных системах. моя идея состоит в том, чтобы иметь локальную очередь на поток, каждый поток будет извлекать задание из своей локальной очереди. Но когда поток достигает некоторого порогового значения, он не должен извлекать задание, а должен передавать задание потоку, который находится ниже порогового уровня.
Я сомневаюсь, как установить порог для потоков.
Альтернативное решение этой проблемы — дать потокам, которые закончили свою очередь, возможность брать работу из очереди других. Это более известно как «кража работы» и является хорошо известным алгоритмом планирования, например,
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.38.8905
Какую библиотеку потоков вы используете?
Я использую две библиотеки OSS во всех моих проектах потоков TBB и Cilk Plus. Одна особенность, которую обеспечивают эти среды выполнения более высокого уровня, заключается в том, что они автоматически планируют задачи для потоков таким образом, чтобы эффективно использовать ресурсы процессора. Среды выполнения также очень эффективны при балансировке нагрузки для многих задач.
www.threadingbuildblocks.org
www.cilkplus.org