2012-03-15 4 views
0

Ну, моя проблема в следующем. У меня есть кусок кода, который работает на нескольких виртуальных машинах, и каждая виртуальная машина имеет N интерфейсов (поток на каждый). Сама проблема - получение сообщения на одном интерфейсе и перенаправление его через другой интерфейс в максимально возможной степени.C++ Многопоточность с несколькими машинами

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

Есть ли какой-нибудь механизм, который может ускорить работу?

+3

Если вы не работаете в кластере с близким соединением, здесь подразумевается многопроцессорность, вы имеете в виду «многопроцессорность» или, возможно, «интерпроцесс IO». – dmckee

+0

Это невозможно расплывчато и открыто. Можете ли вы опубликовать некоторый пример кода, чтобы показать, что вы сейчас делаете, какие показатели производительности вы получаете и как вы измеряете и т. Д.? – Useless

+0

@ dmckee может быть ... Я новичок в этом, и это то, что я был проинструктирован ... –

ответ

3

Кто-то уже придумал именно этот диск - это называется MPI

Посмотрите на любой openMPI или MPICH

+0

Спасибо за ответ !!! Я проверю его и посмотрю, смогу ли я заполнить все требования этим! Еще раз спасибо –

1

Почему бы вам не использовать очереди? По мере поступления сообщений помещайте их в очередь и уведомляйте каждый модуль обработки, чтобы забрать их из очереди. Например:

  • MSG приходит в
  • Модуль 1 помещает его в очередь
  • модуль 2,3 получить уведомление
  • Модуль 2 поднимает его из очереди и сохранили его в базе данных
  • Параллельно модуль 3 выбирает его из очереди и обрабатывает его

Ключ «параллельно». Поскольку эти модули представляют собой разные потоки, а модуль 2 - в db, модуль 3 может массировать ваше сообщение.

Вы можете использовать JMS или MQ или создать собственную очередь.

+0

Спасибо за информацию !!! Я отдам MPI, и если я не смогу все обойти, я попытаюсь принять механизм Queuing –

1

Похоже, вы пытаетесь выполнять параллельные вычисления на нескольких «машинах» (даже если они виртуальны). Вы можете посмотреть существующие протоколы, такие как MPI - Message Passing Interface для обработки этого домена, так как у них есть довольно много функций, которые помогают в этом типе сценария

+0

Спасибо за информацию !!! Я посмотрю, смогу ли я обойти все с помощью MPI! –

Смежные вопросы