• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            msgpack[C++]使用筆記 和 msgpack/cPickle性能對比

            轉(zhuǎn)載自:http://blog.csdn.net/xiarendeniao/article/details/6801338

            python版本msgpack安裝:

            wget http://pypi.python.org/packages/source/m/msgpack-python/msgpack-python-0.1.9.tar.gz

            python2.x setup.py install --prefix=/usr/local/similarlib/


            python版本的msgpack灰常好用,速度上比python內(nèi)置的pickle和cpickle都要快一些,C++版本的使用比較麻煩,下面是本人學(xué)習(xí)時的一個demo,解析python-msgpack dump的一個復(fù)雜字典

            1. #include <msgpack.hpp>  
            2.   
            3. #include <fstream>  
            4. #include <iostream>  
            5. using namespace std;  
            6.   
            7. template <class T>  
            8. void msgunpack(const char* binary_file, T& t, char* buff, uint32_t max){  
            9.     msgpack::unpacked msg;  
            10.     ifstream tf_file(binary_file,ios::in|ios::binary|ios::ate);  
            11.     uint32_t size = tf_file.tellg();  
            12.     tf_file.seekg(0, ios::beg);  
            13.     tf_file.read(buff, size);  
            14.     tf_file.close();  
            15.     msgpack::unpack(&msg, buff, size);  
            16.     msg.get().convert(&t);  
            17. }  
            18.   
            19.   
            20. typedef map<uint32_t, uint32_t> WordsMap;  
            21. typedef map<uint32_t, WordsMap> FieldsMap;  
            22. typedef map<uint64_t, FieldsMap> DocsMap;  
            23.   
            24. int main(int argc, char** argv)  
            25. {  
            26.     uint32_t MAX_BUFF = 1024*1024*100; //100MB  
            27.     char* BUFF = new char[MAX_BUFF];  
            28.   
            29.     DocsMap docsMap;  
            30.     msgpack::unpacked msg;  
            31.     msgunpack("/data/wikidoc/tf_dict_for_nodes/1-1000", docsMap, BUFF, MAX_BUFF);  
            32.     //        msg.get().convert(&docsMap);  
            33.     cout << docsMap.size() << endl;  
            34.         delete[] BUFF;  
            35. }  



            參考: http://wiki.msgpack.org/pages/viewpage.action?pageId=1081387#QuickStartforC%2B%2B-ImplementationStatus


            下面是本人自己封裝的一個msgpack接口頭文件mymsgpack.h

            1.  #ifndef MY_MSGPACK_H  
            2.   
            3. #ifndef MY_MSGPACK_H  
            4. #define MY_MSGPACK_H  
            5. #include <fstream>  
            6. #include <msgpack.hpp>  
            7. using namespace std;  
            8.   
            9. template <class T>  
            10. void load_from_file(const char* binary_file, T& t) {  
            11.         ifstream binaryFstream(binary_file,ios::in|ios::binary|ios::ate);  
            12.         uint32_t size = binaryFstream.tellg();  
            13.         char* buff = new char[size];  
            14.         binaryFstream.seekg(0, ios::beg);  
            15.         binaryFstream.read(buff, size);  
            16.         binaryFstream.close();  
            17.         msgpack::unpacked msg;  
            18.         msgpack::unpack(&msg, buff, size);  
            19.         msg.get().convert(&t);  
            20.         delete[] buff;  
            21. }  
            22.   
            23. template <class T>  
            24. void load_from_str(const char* binary_str, int len, T& t) {  
            25.         msgpack::unpacked msg;  
            26.         msgpack::unpack(&msg, binary_str, len);  
            27.         msg.get().convert(&t);  
            28. }  
            29.   
            30. template <class T>  
            31. void dump_to_file(T& t, const char* dump_file) {  
            32.     msgpack::sbuffer sbuf;  
            33.     msgpack::pack(sbuf, t);  
            34.     ofstream dumpFstream(dump_file, ios::out|ios::binary|ios::trunc);  
            35.     dumpFstream.write(sbuf.data(), sbuf.size());  
            36.     dumpFstream.close();  
            37. }  
            38.   
            39. template <class T>  
            40. void dump_to_str(T& t, char** dump_str, int& len) { //外部釋放*dump_str  
            41.     msgpack::sbuffer sbuf;  
            42.     msgpack::pack(sbuf, t);  
            43.     len = sbuf.size();  
            44.     *dump_str = (char*)malloc(sbuf.size());  
            45.     memcpy(*dump_str, sbuf.data(), sbuf.size());  
            46. }  
            47.   
            48. #endif  


             


            msgpack編譯通過,鏈接不上的問題 undefined reference to `__sync_sub_and_fetch_4'

            在x84_64機器上正常,在32bit機器上出現(xiàn)上述問題

            [plain] view plaincopy
            1. [xudongsong@BigServerU-4 msgpack-0.5.7]$ cat /etc/issue  
            2. CentOS release 5.4 (Final)  
            3. Kernel \r on an \m  
            4.   
            5. [xudongsong@BigServerU-4 msgpack-0.5.7]$ file /sbin/init  
            6. /sbin/init: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped  

            ./configure不報錯,但是查看config.log顯示有錯誤,程序鏈接msgpack的庫時也報錯

            原因:gcc不能識別CPU體系,需要手動指明

            [plain] view plaincopy
            1. [xudongsong@BigServerU-4 msgpack-0.5.7]$ CFLAGS="-march=pentium -mtune=pentium" ./configure --prefix=/home/xudongsong/msgpack_static --enable-static=yes --enable-shared=no  

            make, make install

            [xudongsong@BigServerU-4 jobs]$ g++ job_calc_weight.cpp -o job_calc_weight -I/home/xudongsong/msgpack_static/include/ -L/home/xudongsong/msgpack_static/lib/ -lmsgpack

            通過!

             


             

            下面是msgpack和cPickle進行性能pk的demo程序(不比較pickle,是因為它比cPickle更慢,《Python cook book》里面有說明):

            [python] view plaincopy
            1. mport sys,time,msgpack,pickle,cPickle,random  
            2.   
            3. test_list = []  
            4. i = 0  
            5. while i<100000:  
            6.     test_list = random.randrange(1,100000)  
            7.     i += 1  
            8.   
            9. print "common len(serialize) = %s"%len(cPickle.dumps(test_list,0))  
            10. print "compress len(serialize) = %s"%len(cPickle.dumps(test_list,1))  
            11.   
            12. #------------------------------------------------------------------------  
            13. results = {}  
            14. time_start = time.time()  
            15. for i in range(1,1000000):  
            16.         results[i] = cPickle.dumps(test_list,1)  
            17. time_mid_1 = time.time()  
            18. print "cPickle dumps eats %s s"%str(time_mid_1-time_start)  
            19.   
            20. for i in range(1,1000000):  
            21.     cPickle.loads(results[i])  
            22. time_mid_2 = time.time()  
            23. print "cPickle loads eats %s s"%str(time_mid_2-time_mid_1)  
            24.   
            25. #------------------------------------------------------------------------  
            26. results = {}  
            27. time_start = time.time()  
            28. for i in range(1,1000000):  
            29.     results[i] = msgpack.dumps(test_list)  
            30. time_mid_1 = time.time()  
            31. print "msgpack pack eats %s s"%str(time_mid_1-time_start)  
            32.   
            33. for i in range(1,1000000):  
            34.     msgpack.loads(results[i])  
            35. time_mid_2 = time.time()  
            36. print "msgpack unpack eats %s s"%str(time_mid_2-time_mid_1)  

             

            posted on 2014-05-29 09:15 楊粼波 閱讀(1833) 評論(0)  編輯 收藏 引用 所屬分類: C++

            无码久久精品国产亚洲Av影片| 狠狠色丁香久久综合婷婷| 久久综合久久综合九色| 中文字幕久久欲求不满| 色综合久久夜色精品国产| 亚洲国产精品18久久久久久| 伊人久久久AV老熟妇色| 天堂无码久久综合东京热| 99久久婷婷免费国产综合精品| 亚洲精品tv久久久久| 国产精品内射久久久久欢欢 | 久久天天躁狠狠躁夜夜不卡| 2021久久精品国产99国产精品| 99久久精品九九亚洲精品| 久久久久精品国产亚洲AV无码| 国产精品视频久久| 国产毛片欧美毛片久久久| 精品欧美一区二区三区久久久| 久久精品国产亚洲精品2020 | 久久夜色tv网站| 久久午夜夜伦鲁鲁片免费无码影视 | 看久久久久久a级毛片| 久久精品国产亚洲αv忘忧草| 99久久精品国内| 日韩人妻无码精品久久久不卡| 久久精品中文字幕一区| 久久国产精品偷99| 成人久久久观看免费毛片| 久久人人爽人人人人片av| 久久无码AV中文出轨人妻| 久久久久国产一级毛片高清板| 狠狠色婷婷综合天天久久丁香 | 久久综合国产乱子伦精品免费| 伊色综合久久之综合久久| 久久播电影网| 国产精品伊人久久伊人电影| 国产精品一区二区久久 | 99国产欧美精品久久久蜜芽| 亚洲精品无码成人片久久| 久久亚洲精品无码aⅴ大香| 久久精品国产欧美日韩99热|