由於最近在進行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.所以會有性能差異。