Protobuf Performance

This benchmark result is tested on workstation with processor of Intel® Xeon® Processor E5-2630 and 32GB RAM

This table contains 3 languages' results:

  • C++ - For C++ there're 3 kinds of parsing ways:
    • new - This is for using new operator for creating message instance.
    • new arena - This is for using arena for creating new message instance.
    • reuse - This is for reusing the same message instance for parsing.
  • Java - For Java there're 3 kinds of parsing/Serialization ways:
    • byte[] - This is for parsing from a Byte Array.
    • ByteString - This is for parsing from a com.google.protobuf.ByteString.
    • InputStream - This is for parsing from a InputStream
  • Python - For Pythong there're 3 kinds of python protobuf for testing:
    • C++-genereated-code - This is for using cpp generated code of the proto file as dynamic linked library.
    • C++-reflection - This is for using cpp reflection, which there's no generated code, but still using cpp protobuf library as dynamic linked library.
    • pure-Python - This is for pure Python version, which don't link with any cpp protobuf library.

Parsing performance

Serialization performance

* The cpp performance can be improved by using tcmalloc, please follow the (instruction)[https://github.com/protocolbuffers/protobuf/blob/master/benchmarks/README.md] to link with tcmalloc to get the faster result.