Я написал реализацию и автоматический генератор кода, позволяющий различным процессам осуществлять межпроцессное взаимодействие с использованием очередей сообщений.
Моя реализация прекрасно работает с примитивными типами данных, но завершается неудачно, когда пользователь хочет передать типы не POD [Plain Old Datatypes].
По предложению людей здесь на ТАК Я читал о Boost Serialization и о том, как он позволяет сериализовать даже не POD.
Вопрос:
Q1. Считается ли сериализация / десериализация механизмом IPC сам по себе или он используется вместе с другой реализацией? [Другими словами, должен ли я улучшить реализацию своей очереди сообщений, используя сериализацию, или я должен перейти к сериализации как самому механизму IPC? ]
Если да, разве это не будет медленным, поскольку включает в себя запись данных на жесткий диск и чтение их оттуда?
или это просто мое недоразумение, и все IPC, такие как d-bus, могут на самом деле сохранять данные на диск и просто передавать идентификатор файла другому процессу для чтения?
Сериализация / десериализация сама по себе не является механизмом IPC — вам нужно использовать что-то вроде каналов для связи между различными процессами. Сказав это, вы можете определенно сериализовать / десерализовать данные в и из этих каналов.
Используя такую стратегию мог быть медленным, но если это так, то любая медлительность возникнет из-за сериализации и буферизации. Если вы используете каналы, вы просто пропускаете сериализованные байты через память, а не записываете на диск и затем читаете с диска.
Я написал реализацию такого шаблона в C # некоторое время назад, там есть пост в блоге Вот если вы заинтересованы в некоторых идеях реализации.
Других решений пока нет …