Общий заявленный V Messaging

Существует два архитектурных решения для достижения параллелизма:

  • Несколько потоков с общим состоянием. Это требует замков блокировки кода и т.д.
  • Модель обмена сообщениями. Сообщения помещаются в очереди, а затем обрабатываются одним потоком.

Мой вопрос: когда несколько потоков превосходят модель обмена сообщениями? Например, предположим, что у вас есть один сервер, который может асинхронно обрабатывать запросы сообщений, помещая их во внутренний сигнал. Есть ли какое-либо узкое место (например, даже на уровне TCP / IP), которое не возникает, если вы используете модель многопоточного сервера.

Спасибо.


person dublintech    schedule 18.10.2012    source источник


Ответы (1)


Хотя ответы на ваш вопрос могут зависеть от многих факторов, я думаю, что важным аспектом, который следует учитывать, является то, как наилучшим образом использовать несколько процессоров на вашем компьютере. Как вы описываете здесь, подход к очереди сообщений с одним потоком, обрабатывающим все сообщения, не оптимален, если ваша машина имеет несколько процессоров. Один поток, обрабатывающий все сообщения, может максимально использовать один ЦП, тогда как другие потоки будут недостаточно использовать другие доступные ЦП. Подход с общим состоянием потенциально может лучше использовать преимущества нескольких ЦП.

Однако другой подход состоит в том, чтобы модифицировать алгоритм очереди сообщений, используя несколько потоков — на один или два меньше числа процессоров — очищающих очередь и обрабатывающих сообщения одновременно. Это дает вам некоторый контроль над использованием ЦП, особенно если у вас есть возможность привязать определенные потоки к конкретным ЦП. Такая высокая степень контроля может сделать многопоточную версию очереди сообщений более предпочтительной, чем совместно используемое состояние.

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

person Reinier Torenbeek    schedule 19.10.2012