Ответ 1
Мы используем boost:: asio и Protobuf для сложных протоколов с низкой скоростью передачи сообщений. Для простых, высоких протоколов скорости обмена сообщениями мы активируем:: asio и пользовательскую сериализацию.
В библиотеке С++ Protobuf используется std::string для представления строковых полей для сообщений, которые он десериализует, что означает, что распределение свободного хранилища выполняется Protobuf для каждого строкового поля в каждом полученном вами сообщении. Это делает Protobuf не очень эффективным для обмена высокочастотными сообщениями.
Я бы использовал Protobuf всюду, если бы мог. Это замечательный инструмент для создания богатых, сложных, независимых от платформы, совместимых с протоколом "вперед-назад".
ДОПОЛНЕНИЕ
Поскольку кажется, что люди читают этот ответ, я должен поделиться тем, что я узнал, что в С++ Protobuf вы можете повторно использовать объекты сообщения десериализации, чтобы уменьшить частоту malloc при чтении.
См. Советы по оптимизации:
https://developers.google.com/protocol-buffers/docs/cpptutorial