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

Самый быстрый IPC-метод в Windows 7

Каков самый быстрый способ Interprocess Communication (IPC) в Windows 7? Мы хотели бы использовать только блоки памяти (двусторонние).

Это ReadProcessMemory или что-то еще? Мы хотели бы использовать plain C, но, например, что использует библиотека Boost для IPC?

4b9b3361

Ответ 1

ReadProcessMemory не следует указывать в качестве метода IPC; да, он может использоваться как таковой, но он существует в основном для целей отладки (если вы проверяете его ссылку, он под категорией "Функции отладки" ), и он, безусловно, медленнее, чем "реальная" разделяемая память, поскольку он копирует память процесс в указанный буфер, в то время как в реальной общей памяти эти служебные данные отсутствуют.

Полный список методов IPC, поддерживаемых Windows, доступен в MSDN; все же, если у вас есть только два приложения, которые хотят разделить блок памяти, вы должны создать именованный файл с отображением памяти (подкрепленный файлом подкачки) с помощью CreateFileMapping/MapViewOfFile, который должен быть самым простым и быстрым методом, Подробности сопоставления файлов описаны на странице на MSDN.

соответствующие классы Boost IPC могут действовать как тонкая оболочка вокруг общей памяти, AFAIK только инкапсулирует вызовы соответствующим системным API, но в конце вы получаете обычный указатель на блок разделяемой памяти, поэтому работа должна быть такой же быстрой, как использование собственных API.

В связи с этим я советую вам использовать Boost.Interprocess, поскольку он переносимый, С++-friendly (он предоставляет семантику RAII) и не использует дают вам какое-либо снижение производительности после создания блока общей памяти (он может предоставлять дополнительные функции в общей памяти, но все они вступают в силу - если вы просто хотите, чтобы общая память получалась именно так).