Может ли общая готовая очередь ограничить масштабируемость многопроцессорной системы? - PullRequest
0 голосов
/ 28 ноября 2009

Может ли общая очередь готовности ограничивать масштабируемость многопроцессорной системы?

Ответы [ 2 ]

0 голосов
/ 25 января 2012

Очередь, готовая для каждого процессора, является естественным выбором для структуры данных. Это потому, что большинство операционных систем будут пытаться поддерживать процесс на одном и том же процессоре, по многим причинам, вы можете зайти в Google. Что это значит? Если поток готов, а другой процессор находится в режиме ожидания, ОС не сможет быстро перенести поток на другой процессор. балансировка нагрузки срабатывает только в долгосрочной перспективе.

Если бы ситуация была иной, то есть не было целью разработки сохранить привязку потоков к процессорам, скорее миграция потоков была бы частой, тогда сохранение отдельных очередей выполнения для каждого процессора было бы дорогостоящим.

0 голосов
/ 28 ноября 2009

Проще говоря, наиболее определенно. Читайте дальше для обсуждения.

Настройка службы является художественной формой или требует бенчмаркинга (а пространство для количества концепций, которые вам нужно для бенчмаркинга, огромно). Я считаю, что это зависит от следующих факторов (это не является исчерпывающим).

  1. сколько времени занимает обработка предмета, полученного из готовой очереди, и
  2. сколько у них рабочих потоков?
  3. сколько их производителей и как часто они производят?
  4. Какой тип ожидания вы используете? спин-блокировки или ожидания ядра (последний медленнее)?

Таким образом, если элементы производятся часто и если количество потоков велико, а время обработки мало: структура данных может быть заблокирована для больших окон, что может привести к сбою.

Другие факторы могут включать в себя используемую структуру данных и длительность блокировки структуры данных, например, если вы используете связанный список для управления такой очередью, операции add и remove требуют постоянного времени. Прио-очередь (куча) занимает в среднем еще несколько операций, когда элементы added.

Если ваша система предназначена для бизнес-обработки, вы можете убрать этот вопрос из картинки, просто набрав:

  1. Архитектура, основанная на процессах и просто порождающая процессы нескольких производителей-потребителей и использующая файловую систему для связи,
  2. Использование непрограммируемого языка программирования совместной работы с потоками, такого как Python без стеков, Lua или Erlang.

также обратите внимание: примитивы синхронизации вызывают межпроцессорные перепады кэширования, которые не годятся и, следовательно, должны использоваться с осторожностью.

Дискуссия может продолжаться для заполнения кандидатской диссертации: D

...