На самом деле это не проблема многопоточности, а проблема одновременного выполнения многих программ.Это сложно для большинства операционных систем ПК, потому что это противоречит идее разделения времени.
Давайте предположим некоторый рабочий процесс.
Предположим, у нас есть 8 ядер и мы создаем 8 потоков для их подачи;хорошо это легкоДалее мы выбираем мониторинг загрузки ядра, чтобы подвести итог, сколько задач выполняется на определенном ядре;ну, это требует некоторых статистических допущений, например, в Linux вы можете получить график средней нагрузки за 1/5/15 минут, но это можно сделать.Статистическая диаграмма ясна, и теперь мы получаем график о том, сколько процессов с привязкой к процессору выполняется, скажем, наблюдая за другими процессами, интенсивно использующими три процессора.
Затем мы подошли к вопросу: мы должны сделать 3 избыточныхспящих потоков, но какие 3?
Обычно мы выбираем 3 потока произвольно, потому что планировщик автоматически организует остальные 8 потоков, связанных с процессором.В некоторых случаях мы явно переводим потоки на ядра с высокой нагрузкой в спящий режим, назначаем другие потоки определенным ядрам с низкой нагрузкой и позволяем планировщику делать все остальное.Большинство политик планирования также пытаются «поддерживать кэш процессора горячим» , что означает, что они имеют тенденцию запрещать передачу потоков между ядрами.Мы разумно ожидаем, что наши ресурсоемкие потоки могут использовать основной кэш, поскольку другие процессы запланированы для 3 переполненных ядер.Все выглядит хорошо.
Однако это может привести к сбою в строго синхронизированных вычислениях.В этом сценарии нам нужно запустить наши 5 потоков одновременно.Одновременность здесь означает, что 5 потоков должны получить процессор и работать почти одновременно.Я не знаю, есть ли какой-нибудь планировщик на ПК, который мог бы сделать это для нас.В большинстве случаев низкой нагрузки все по-прежнему работает нормально, поскольку затраты на ожидание одновременности тривиальны.Но когда нагрузка на ядро высока и даже 1 из 5 наших потоков нарушен, иногда мы обнаруживаем, что тратим много жизненных циклов на ожидание.
Это может помочь составить расписание вашей программы в режиме реального времени.программа, но это не идеальное решение.Статистически это приводит к более широкому временному окну для одновременности, когда он получает больший приоритет управления процессором.Я должен сказать, что это не гарантировано.