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

Из-за проблемы использования библиотеки vc ++ в программе, скомпилированной g ++, я построил локальную систему сервер-клиент, в которой сервер скомпилирован на vc ++, а клиент - на g ++, и они взаимодействуют через сокеты. Через сокет происходит большая передача данных (около 2000000 записей в каждом из 22 полей), и это серьезное узкое место, которое сильно замедляет весь процесс. Могу ли я каким-то образом иметь своего рода разделяемую память между серверным и клиентским процессами, чтобы доступ был намного быстрее?

c++ c
0
aks 7 Сен 2010 в 13:56
1
Привет, акс, вы действительно добились обмена общей памятью между процессами, скомпилированными разными компиляторами? (Вы упоминаете vc ++ и g ++).
 – 
tssch
2 Сен 2013 в 16:54

2 ответа

Лучший ответ

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

Если он на разных ПК, то тоже да, но он не будет быстрее, чем сокеты.

1
BarsMonster 7 Сен 2010 в 14:02
Его на том же компьютере. как я могу использовать разделяемую память? укажите мне, пожалуйста, на некоторые ресурсы
 – 
aks
7 Сен 2010 в 14:06
Взгляните сюда: google.de/… и здесь: stackoverflow.com/questions/697664/…
 – 
BarsMonster
7 Сен 2010 в 14:12
Не могли бы вы порекомендовать boost :: interprocess для моей ситуации?
 – 
aks
7 Сен 2010 в 14:21
1
Будет ли подход с общей памятью работать также между процессами, скомпилированными с помощью разных компиляторов? (Как подразумевается в его вопросе?)
 – 
tssch
2 Сен 2013 в 16:55

Я полагаю, вы используете это в системе Windows? (Вы не говорите.) Поскольку это локальный клиент-сервер, у вас есть другие варианты.

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

При условии, что он всегда местный, это, вероятно, ваш самый быстрый и безопасный способ.

(Я бы дал вам более конкретную информацию об API, но вчера я забрал свои книги домой, чтобы очистить офис - извините!)

2
Ragster 7 Сен 2010 в 14:06
1
«Управление файлами с отображением в памяти» msdn.microsoft.com/en-us/library /ms810613.aspx
 – 
tenfour
7 Сен 2010 в 14:08