Go 和 PHP 性能如何進行對比?你覺得哪個更好?
PHP性能很差嗎?
每次講到PHP和其他語言間的性能對比,似乎都會發現這樣一個聲音:單純的性能對比沒有意義,主要瓶頸首先是數據庫,其次是業務代碼等等。
好像PHP的性能真的不能單獨拿出來討論似的。但其實一份關于Workerman的基本性能對比中發現,Workerman比Go還要強。
該測試的原文在這里:https://www.workerman.net/a/1337 ,大家有興趣可以自己查看。改文章將GO、Workerman、Webman、Swoole、Swoole+協程進行了測壓對比。
大體上的結果是:
- workeman壓測性能高于golang
- webman短連接高于golang
- webman的keepalive長連接略低于golang
- swoole短連接高于golang
- swoole的keepalive低于golang
- workerman和webman不管是短連接還是keepliave都高于swoole。
總體而言,Workerman和Webman比較強。這是一個基本的hello word的IO測試。雖然我們都認為這并沒有什么用,但是這還是很有意思的一個現象。
為什么現在的PHP框架都在宣稱高性能?
你會發現,現在PHP的各個熱點文章都把高性能掛在嘴邊,這是為什么呢?PHP的性能很差,這似乎是共識,即便是PHP的開發者也從來不去深究這個問題,但現在為什么大家都在說PHP的性能很高呢?
現在的PHP框架都在宣稱高性能,主要是因為隨著互聯網應用的不斷發展,對于響應速度和性能的要求也越來越高,而傳統的PHP開發方式在并發處理和性能方面存在一定的瓶頸,因此出現了一些新的PHP框架,例如Swoole、Laravel、Yii以及ThinkPHP等,都在性能方面進行了大量優化,以滿足用戶對于高性能的要求,并且在處理高并發時有更好的表現。此外,現代框架的出現也推動了PHP語言本身的發展,PHP在性能方面也做出了一些改善。
總結的說:
- PHP本身在進步,不要再用PHP5的時代看現在的PHP
- PHP生態在變化,新的框架的誕生都在性能方面做優化
- PHP的運行方式也發生了變化,從PHP-FPM到現在的基于epoll的驅動
性能對比有意義嗎?
單純的對比GO和PHP,其實有很多有趣的值得注意的地方。
JSON處理
首先GO的json解析并不如PHP的更快更好,PHP的json解析是用C實現的,也意味著即便是在PHP-FPM環境下,單純的json處理也很快。而且更別提開發上了,PHP不用預定義結構,一行代碼直接將json從字符串變成了數組(或對象),這一點真的很清爽。
協程
PHP也有協程,由關鍵字yield實現,但使用起來很隱晦,Swoole借用了GO語法中的go關鍵字,使在使用PHP是也能很氣輕松地實現協程用法。
異步
PHP是一個同步語言,即便是有協程,但大多數的代碼操作都是同步的,比如file_get_content,無論你再怎么牛逼,它也是同步的。
其實PHP在異步上,也有很多的進本,像Workerman、Swoole、ReactPHP等等框架,都推出了自己環境下的異步HTTP客戶端庫。但這可能是不夠的。不過有一個很有意思的項目,是ReactPHP框架下的,叫:chemem/asyncify,他能讓任何的PHP代碼都以異步的方式運行。使用起來也很簡單:
use function Chemem\Asyncify\call;
$call = call('file_get_contents', ['foo.txt'])
->then(
function (?string $contents) {
echo $contents;
},
function (\Throwable $err) {
echo $err->getMessage();
}
);
總之
開發者之間很喜歡做性能對比,而PHP開發者對這方面有更多的情節??赡苁荘HP的生態太龐大了,即便是PHP開發者之間,面對不同框架,也會有不同的態度。我見過一個網友,一直在吹Swoole,一句其他的意見也聽不進去,也是很有趣的現象。
但有一種論調,叫XXX割裂了PHP,這種說法是不對的。PHP從來不像JAVA和GO那樣,在某個時代都認同某個技術,比如java的spring。PHP一直很活躍,這是好事。PHP可能從來沒有時尚過,沒有引領過什么,但他也從來不落后于時代。
但PHP的從業者確實不夠技術范兒,落后太多了。這一點無論國內外都一樣,如果在國外發表一篇性能對比的文章,其中使用的PHP版本是PHP7.1,無論結果如何,人們也會在評論區高呼:“太棒了,最起碼他沒有用PHP5.6”。
性能對比也是有操作空間的,比如我們發起一個比賽:哪個語言處理JSON最快?對于這個問題,PHP可能不是最快的,但也不會有什么擔心的。