Подтвердить что ты не робот

Лучший способ для межпроцессного общения на С++

У меня есть два процесса, которые будут запрашивать другие данные. В течение ограниченного времени (10000 в секунду) будет производиться огромное количество запросов, а данные ( > 100 мб) будут передаваться в секунду. Тип данных будет интегральным тип (двойной, целое) Мой вопрос заключается в том, каким образом связать этот процесс?

Общая память, очередь сообщений, lpc (Локальный вызов процедуры) или другие.

А также я хочу спросить, какую библиотеку вы предлагаете? кстати, пожалуйста, не предлагайте MPI. изменить: под windows xp 32 бит

4b9b3361

Ответ 1

Одно слово: Boost.InterProcess. Если это действительно нужно быть быстрым, общая память - это путь. У вас почти есть нулевые служебные данные, поскольку операционная система выполняет обычное сопоставление между виртуальными и физическими адресами, и для данных не требуется копирование. Вам просто нужно искать проблемы concurrency.

Для отправки команд, таких как shutdown и query, я бы использовал очереди сообщений. Я ранее использовал локальное сетевое программирование для этого и использовал распределение разделяемой памяти вручную, прежде чем я узнал о повышении. Черт, если мне нужно будет переписать приложение, я сразу же подберу бунт. Boost.InterProcess делает это более легким для вас. Проверьте это.

Ответ 2

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

Ответ 3

Если ваши данные состоят из нескольких типов и/или вам нужны такие вещи, как мьютексы, используйте Boost. Else используют общий раздел памяти с помощью #pragma data_seg или файла с отображением памяти.

Ответ 4

Я добавлю второе предложение Marc - я бы не стал беспокоиться о повышении, если у вас нет проблемы с переносимостью или вы хотите делать классные вещи, такие как стандартные типы контейнеров по сравнению с разделяемой памятью (в этом случае я бы определенно использовал boost).

В противном случае очереди сообщений и разделяемая память довольно просты.

Ответ 5

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