Проще говоря, наиболее определенно. Читайте дальше для обсуждения.
Настройка службы является художественной формой или требует бенчмаркинга (а пространство для количества концепций, которые вам нужно для бенчмаркинга, огромно). Я считаю, что это зависит от следующих факторов (это не является исчерпывающим).
- сколько времени занимает обработка предмета, полученного из готовой очереди, и
- сколько у них рабочих потоков?
- сколько их производителей и как часто они производят?
- Какой тип ожидания вы используете? спин-блокировки или ожидания ядра (последний медленнее)?
Таким образом, если элементы производятся часто и если количество потоков велико, а время обработки мало: структура данных может быть заблокирована для больших окон, что может привести к сбою.
Другие факторы могут включать в себя используемую структуру данных и длительность блокировки структуры данных, например, если вы используете связанный список для управления такой очередью, операции add
и remove
требуют постоянного времени. Прио-очередь (куча) занимает в среднем еще несколько операций, когда элементы added
.
Если ваша система предназначена для бизнес-обработки, вы можете убрать этот вопрос из картинки, просто набрав:
- Архитектура, основанная на процессах и просто порождающая процессы нескольких производителей-потребителей и использующая файловую систему для связи,
- Использование непрограммируемого языка программирования совместной работы с потоками, такого как Python без стеков, Lua или Erlang.
также обратите внимание: примитивы синхронизации вызывают межпроцессорные перепады кэширования, которые не годятся и, следовательно, должны использоваться с осторожностью.
Дискуссия может продолжаться для заполнения кандидатской диссертации: D