昨天和一個前同事聊天,各種吐槽PHP,吐槽Swoole,他認為PHP到處是坑,PHP局限很大。PHP+Swoole不適合做高並發伺服器,C+Swoole才是最好的方案。C++有各種資料結構,C++可以開線程,C++可以共用對象。看來有必要好好得說明一下了。
PHP比C/C++或Java少了什嗎?多線程,多線程,多線程……
是的。PHP比C/C++、Java少了多了多線程。PHP只有多進程的方案,所以PHP裡的全域變數和對象不是共用的、資料結構也不能跨進程操作、Socket檔案描述符不能共用等等。所以PHP有局限?
多線程看似比多進程要強大很多,實際上我可以負責任的告訴你,多線程帶來的坑更多。
反而在看多進程,其實就簡單的多了。
所謂PHP限制了Swoole,這完全是無稽之談。合理利用Swoole提供的Table、Atomic、SendMessage/PipeMessage、Task完全可以實現非同步非阻塞的代碼邏輯。
C++寫出來的程式效能更好?
這完全是盲目的迷信,密集計算的程式C++確實是有優勢的。而並發伺服器核心是IO,並非大規模密集運算。C++從語言層面來看並沒有什麼優勢。另外C++中的大部分資料結構在PHP中都有對應的實現,實在不行自己寫個專門的擴充也能解決之。
高並發的伺服器單機能維持10W串連、每秒可處理3-5W筆訊息收發。這種效能水準已經可以應用在BAT的核心系統上了。
開發效率快的意義是什嗎?
這位同事還說PHP開發Server雖然比C++快了,但是追求效能的極致還是要用C++。我要告訴你效率高了究竟意義何在。開發一套好程式不是一 件容易的事情,需要程式員投入大量時間和精力。開發效率提升的意義並不是簡單的我可以更少時間完工,而是剩下的時間你可以增加單元測試、修複BUG、提升 使用者體驗、完善細節、提供配套工具、最佳化效能、增加關鍵日誌、增加監控警示、增加容災方案。
(本文作者是 Swoole 的創始人, 原文標題:“關於C++、PHP和Swoole”)
原文:http://rango.swoole.com/archives/473 作者: @韓天峰-Rango