在分析caffe2源碼的過程中,由于caffe2使用protobuf作為網絡結構和網絡參數序列化和反序列化的機制,想在反序列化之前進行加解密處理,這是反向protouf其實有兩個版本的實作來進行消息的解析。
protobuf 中對消息的解析有兩個版本,一個是python版本,另外一個是c++版本。python版本相關的代碼存放路徑在:./python/google/protobuf/internal/python_message.py 中,而c++實作版本存放路徑在:./python/google/protobuf/pyext/message.cc ,在python目錄下有一個setup.py檔案,裡面有一個--cpp_implemetation選項,這個選項可以控制使用cpp的實作還是使用python的實作來進行消息的解析(序列化和反序列化),預設這個選項是關閉的,是以如果從源代碼安裝protobuf,那麼就會預設使用python的實作來進行消息的解析,這時會發現解析的性能變慢。如果用pip安裝的protobuf來進行消息的解析,預設采用的是cpp的實作,所有會發現效率更高。
