Я пишу приложение, которое использует стороннюю библиотеку для выполнения тяжелых вычислений.
Эта библиотека реализует внутренний параллелизм и создает потоки заданного числа. Я хочу запустить несколько экземпляров (динамического подсчета) этой библиотеки и, следовательно, в конечном итоге довольно сильно переподписываюсь на процессор.
Есть ли способ увеличить «квант времени» всех потоков в процессе, чтобы, например. все потоки с нормальным приоритетом редко переключают контекст (выдают), если они явно не переданы, например, через семафоры?
Таким образом, я мог бы избежать большей части накладных расходов на производительность из-за переподписки процессора. Обратите внимание, что в этом случае мне все равно, если поток будет голодать в течение нескольких секунд.
РЕДАКТИРОВАТЬ:
Одним из сложных способов сделать это является выполнение планирования потоков вручную.
- Перечислить все потоки с определенным приоритетом (например, нормальный).
- Приостановить их всех.
- Создайте цикл, который возобновляет/приостанавливает потоки каждый, например. 40 мс и гарантирует, что запущено не больше потоков, чем текущее количество процессоров.
Какие-либо серьезные недостатки с этим подходом? Не знаете, каковы накладные расходы на возобновление/приостановку потока?