Я должен начать с того, что я очень плохо разбираюсь в этой теме, так что пошутите меня, если я покажусь невежественным.
Из-за проблемы использования библиотеки vc ++ в программе, скомпилированной g ++, я построил локальную систему сервер-клиент, в которой сервер скомпилирован на vc ++, а клиент - на g ++, и они взаимодействуют через сокеты. Через сокет происходит большая передача данных (около 2000000 записей в каждом из 22 полей), и это серьезное узкое место, которое сильно замедляет весь процесс. Могу ли я каким-то образом иметь своего рода разделяемую память между серверным и клиентским процессами, чтобы доступ был намного быстрее?
2 ответа
Если они находятся на одном компьютере, то да, общая память работает быстрее и работает с разными программами.
Если он на разных ПК, то тоже да, но он не будет быстрее, чем сокеты.
Я полагаю, вы используете это в системе Windows? (Вы не говорите.) Поскольку это локальный клиент-сервер, у вас есть другие варианты.
Я думаю, что для межпроцессного взаимодействия Windows с большими объемами данных вы должны использовать файлы с отображением памяти. Их можно использовать совместно с дескрипторами клобальной памяти. Затем с помощью общих объектов ядра для синхронизации (я бы предложил мьютексы или события) вы можете контролировать доступ, чтобы убедиться, что это делается безопасным образом.
При условии, что он всегда местный, это, вероятно, ваш самый быстрый и безопасный способ.
(Я бы дал вам более конкретную информацию об API, но вчера я забрал свои книги домой, чтобы очистить офис - извините!)
Похожие вопросы
Связанные вопросы
Новые вопросы
c++
C++ — это язык программирования общего назначения. Изначально он разрабатывался как расширение C и имел аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде, который будет скомпилирован с помощью компилятора C++. Используйте тег версии для вопросов, связанных с конкретной стандартной версией [C++11], [C++14], [C++17], [C++20] или [C++23]. и т.д.