Самый быстрый метод IPC в Windows 7 - PullRequest
37 голосов
/ 20 августа 2011

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

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

1 Ответ

48 голосов
/ 20 августа 2011

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

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

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

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

...