PHP與Perl操作Memcached速度差異比較

由於最近在進行memcached方面的工作


在性能測試中使用瞭php以及perl對memcached進行操作結果發現php與perl對memcached操作的性能差異大約在40~50%之間


以下是測試腳本,所作的操作一樣.使用1k的數據重復512000次.,總共插入memcached 500M的數據


php操作腳本


<?php
ini_set(“memcache.hash_function”,”crc32″);
$memcache=newMemcache;
$memcache->addServer(localhost,30001);
$memcache->flush();
for($i=0;$i<512000;$i++){
        $memcache->set($i,
“共1k的填充數據”,0,1000);
}
?>
接著是perl腳本


#!/usr/bin/perl
use Cache::Memcached();
$memcache=newCache::Memcached{servers=>[“localhost:30001”]};
$memcache->flush_all();
for($i=0;$i<512000;$i++){
    $memcache->set($i,
“共1k的填充數據”);
}
$memcache->disconnect_all();
從代碼行數上來看.兩者也幾近一致
但是測試結果卻是大相徑庭
我們在linux下使用time對執行進行計時
3次執行結果如下


[root@lenovo5 ~]# time ./test1k.pl
real    1m2.265s
user    0m36.427s
sys     0m17.114s
[root@lenovo5 ~]# time ./test1k.pl
real    1m2.814s
user    0m36.380s
sys     0m17.463s
[root@lenovo5 ~]# time ./test1k.pl
real    1m13.684s
user    0m44.603s
sys     0m18.366s
[root@lenovo5 ~]# time php ./test1k.php
real    0m38.055s
user    0m11.768s
sys     0m13.891s
[root@lenovo5 ~]# time php ./test1k.php
real    0m38.892s
user    0m12.416s
sys     0m14.044s
[root@lenovo5 ~]# time php ./test1k.php
real    0m38.955s
user    0m12.430s
sys     0m13.088s
差異很明顯.perl執行需要1分左右而php隻需要40秒不到,就是php的執行比perl的大約快40%


分析之後有幾個因素的可能


1.perl的字串處理速度較慢.我們看到perl版本的set中不需要加入長度參數.這樣每次插入可能都會需要set函數去判斷傳入的字串長度.這樣可能較慢.但是隨後我們發現php的set雖然有長度參數.但是這個參數並非是強制性的.比如我參數寫瞭1000,實際字串有1200.結果將會是插入 1200長度的字串,而並沒有截斷.所以這一點不是非常站得住腳


2.perl的擴展與php擴展實現方式不同.php的memcache客戶端是PECL.也就是C擴展,而perl的擴展實現很有可能還是perl.所以會有性能差異。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *