Я рассматриваю возможность использования сотен потоков для реализации задач, которые управляют устройствами по сети.
Это приложение C ++, работающее на процессоре PowerPC с ядром Linux.
После начальной фазы, когда каждая задача выполняет синхронизацию для копирования данных с устройства в задачу, задача становится бездействующейи активируется только при получении сигнала тревоги или необходимости изменения некоторых данных (конфигурации), что редко после фазы запуска.Как только все задачи достигнут фазы «ожидания», я ожидаю, что пробуждаются лишь несколько раз в секунду.
Итак, моя главная проблема в том, что, если у меня будут сотни потоков, они негативно отразятся наСистема, когда они простаивают?
Спасибо.amso
edit:
Я обновляю вопрос, основываясь на полученных ответах.Спасибо, парни.Таким образом, кажется, что наличие массы бездействующих потоков (блокировка ввода-вывода, ожидание, спящий режим и т. Д.), per se , не повлияет на систему с точки зрения скорости отклика.Конечно, они будут тратить дополнительные деньги на стек каждого потока и данные TLS, но это нормально, пока мы добавляем больше памяти (что делает ее более выгодной)
Но тогда другие проблемы должны бытьприходилось.Ожидание сотен потоков приведет к увеличению использования памяти ядром из-за необходимости очередей ожидания или других подобных ресурсов.Есть также проблема задержки, которая выглядит недетерминированной.Чтобы проверить отзывчивость и использование памяти каждым решением, нужно измерить его и сравнить.
Наконец, вся идея сотен потоков, которые будут в основном простаивать, может быть смоделирована как пул потоков.Это немного уменьшает линейность кода, но значительно увеличивает масштабируемость решения, а благодаря тщательному уходу можно легко настроить компромисс между производительностью и использованием ресурсов.
Я думаю, это все.Спасибо всем за их вклад.
-
Амсо