- 論壇徽章:
- 0
|
本帖最后由 bs 于 2011-10-17 16:33 編輯
最近閑來搗鼓了一下boost以及其asio庫,總體感覺boost是越來越全面了,
很多時候在開發(fā)效率上已經(jīng)接近java,故花時間弄一個key-value服務,結果
勉強不算太差,核心環(huán)節(jié)主要是AIO以及多線程,故斗膽獻丑請大家多多指教。
Memcpp v1.0.0
特點:
一、Memcpp內建定時清理機制,保證非過期數(shù)據(jù)安全,正常情況不會以任何方式刪除數(shù)據(jù)。
二、Memcpp采用高性能異步IO網(wǎng)絡連接,支持多線程大并發(fā)訪問。
三、Memcpp支持Memcached協(xié)議下常用的set、get、delete、add、replace操作。
四、Memcpp性能較為接近Memcached,綜合性能達到單線程Memcahed的90%。
五、完全兼容windows以及l(fā)inux等平臺。
技術細節(jié):
一、使用boost::asio異步IO,更強的并發(fā)連接能力。
二、連接環(huán)節(jié)session使用boost: bject_pool(對象池)+boost::shared_ptr(智能指針)方式,確保連接對象穩(wěn)定與高性能。
三、兼容Memcached通訊協(xié)議。
四、對數(shù)字與字符鍵進行分離存儲,區(qū)別優(yōu)化。
五、存儲層采用boost::pool_allocator內存池分配技術,保證高性能以及避免內存碎片產(chǎn)生。
六、存儲間使用讀寫鎖保障線程同步與安全。
七、使用boost::unordered_map高速存儲介質(hash表)。
八、內建Timer定時清理過期數(shù)據(jù)。
九、全部采用c++ boost或stl標準庫,兼容完好。
流程圖:
![]()
Linux環(huán)境下簡單性能測試與對比:
這邊使用一個php腳本:
- $mem = new Memcache();
- //Memcpp
- connect('127.0.0.1', 11210);
- //Memcached
- //$mem->connect('localhost', 11211);
- $t = microtime(true);
- for($i = 0; $i < 50000; ++$i ) $mem->set($i,'test');
- for($i = 0; $i < 50000; ++$i ) $mem->get($i);
- echo ' run time:' ,microtime(true) - $t;
復制代碼 分別對Memcpp和Memcached測試50000條讀寫操作,性能對比結果如下(秒):
//Memcpp
run time:2.4199938774109
//Memcached
run time:2.1138839607239
結論:
由于保守地使用了讀寫鎖,Memcpp綜合性能相較Memcached要遜色一些,其次在Linux下使用異步IO方面,boost.asio的性能還是不如libevent強大。
blog:
http://lajabs.net/memcpp
./bin/Release windows生成的可執(zhí)行文件 Memcpp.exe
./linux linux下的安裝文件,直接
# make
運行方法 程序名 listen IP port
linux
# memcpp 127.0.0.1 11210
windows
> memcpp 127.0.0.1 11210 |
|