首頁  >  文章  >  後端開發  >  php比C/C++或Java少了什麼?多線程,多線程,多線程…

php比C/C++或Java少了什麼?多線程,多線程,多線程…

伊谢尔伦
伊谢尔伦原創
2016-11-30 11:17:431192瀏覽

昨天和一個前同事聊天,各種吐槽PHP,吐槽Swoole,他認為PHP到處是坑,PHP局限很大。 PHP+Swoole不適合做高併發伺服器,C+Swoole才是最好的方案。 C++有各種資料結構,C++可以開線程,C++可以共享物件。看來有必要好好得說明一下了。

HP比C/C++或Java少了什麼?多線程,多線程,多線程…

是的。 PHP比C/C++、Java少了多執行緒。 PHP只有多進程的方案,所以PHP裡的全域變數和物件不是共享的、資料結構也不能跨進程操作、Socket檔案描述符不能共享等等。所以PHP有局限?

多執行緒看似比多進程強大很多,實際上我可以負責任的告訴你,多執行緒帶來的坑更多。

資料同步問題會讓你崩潰的。要嘛就犧牲性能到處加鎖,要嘛就用地獄難度的無鎖並發編程,據我所知目前國內能掌握此項技能的人鳳毛麟角。

不要以為加鎖就萬事大吉了,你會在死鎖問題上栽個大跟頭。當你的程式邏輯複雜後,鎖越來越難控制了,一旦死鎖你的程式基本上就結束了。

某個執行緒掛了那所有執行緒都會退出

反而在看多進程,其實就簡單的多了。

配合進程間通信,基本上你可以實現任意的資料共享。例如利用一個進程專門存資料結構和對象,其他進程的資料操作全部投遞到此進程來

多進程不需要鎖

多進程可以使用共享記憶體的資料結構實現一些多執行緒的功能。如Swoole提供的Table、Atomic可以實現資料共享,但成本很低。未來還會加入共享記憶體佇列

所謂PHP限制了Swoole,完全是無稽之談。合理利用Swoole提供的Table、Atomic、SendMessage/PipeMessage、Task完全可以實現非同步非阻塞的程式碼邏輯。

C++寫出來的程式效能更好?

這完全是盲目的迷信,密集計算的程式C++確實是有優勢的。而並發伺服器核心是IO,並非大規模密集運算。 C++從語言層面來看並沒有什麼優勢。另外C++中的大部分資料結構在PHP中都有對應的實現,實在不行自己寫個專門的擴展也能解決之。

高併發的伺服器單機能維持10W連線、每秒可處理3-5W筆訊息收發。這種效能水準已經可以應用在BAT的核心系統上了。

開發效率快的意義是什麼?

這位同事還說PHP開發Server雖然比C++快了,但是追求效能的極致還是要用C++。我要告訴你效率高了究竟意義何在。開發一套好程式不是一件容易的事情,需要程式設計師投入大量時間和精力。開發效率提升的意義不是簡單的我可以更少時間完工,而是剩下的時間你可以增加單元測試、修復BUG、提升用戶體驗、完善細節、提供配套工具、優化性能、增加關鍵日誌、增加監控警報、增加容災方案。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn