• <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>

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            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性能對比

            轉載自: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內置的pickle和cpickle都要快一些,C++版本的使用比較麻煩,下面是本人學習時的一個demo,解析python-msgpack dump的一個復雜字典

            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機器上出現上述問題

            [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++

            久久久精品国产sm调教网站| 国产精品对白刺激久久久| 三上悠亚久久精品| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区| 久久天天躁狠狠躁夜夜avapp| 亚洲美日韩Av中文字幕无码久久久妻妇| 久久精品这里热有精品| 国产成人久久精品区一区二区| 色婷婷久久综合中文久久蜜桃av| 久久精品免费全国观看国产| 伊人久久一区二区三区无码| 亚洲精品成人久久久| 香蕉久久夜色精品国产尤物| 性做久久久久久久久浪潮| 久久久这里有精品| 久久精品国产亚洲AV忘忧草18| 久久精品国产2020| 99国产精品久久| 国产精品99久久不卡| 一本大道久久东京热无码AV| 免费精品久久天干天干| 久久婷婷国产综合精品| 久久精品无码午夜福利理论片 | 久久se这里只有精品| 999久久久国产精品| 四虎久久影院| 久久夜色精品国产噜噜亚洲AV | 亚洲欧美成人久久综合中文网| 久久久这里只有精品加勒比| 精品久久久久久久无码| 久久国产免费直播| 亚洲精品国精品久久99热一| 伊人色综合久久天天| 久久亚洲精品国产精品婷婷| 国产成人综合久久综合 | 欧美久久久久久午夜精品| 久久精品国产亚洲αv忘忧草| 久久精品国产精品亚洲精品| 少妇人妻综合久久中文字幕 | 国产V综合V亚洲欧美久久| 久久精品亚洲精品国产欧美|