中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

PHP比C/C++或Java少了什么?多線程,多線程,多線程……

2018-07-20    來源:編程學習網(wǎng)

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

昨天和一個前同事聊天,各種吐槽PHP,吐槽Swoole,他認為PHP到處是坑,PHP局限很大。PHP+Swoole不適合做高并發(fā)服務器,C+Swoole才是最好的方案。C++有各種數(shù)據(jù)結(jié)構(gòu),C++可以開線程,C++可以共享對象?磥碛斜匾煤玫谜f明一下了。

PHP比C/C++或Java少了什么?多線程,多線程,多線程……

是的。PHP比C/C++、Java少了多了多線程。PHP只有多進程的方案,所以PHP里的全局變量和對象不是共享的、數(shù)據(jù)結(jié)構(gòu)也不能跨進程操作、Socket文件描述符不能共享等等。所以PHP有局限?

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

  • 數(shù)據(jù)同步問題會讓你崩潰的。要么就犧牲性能到處加鎖,要么就用地獄難度的無鎖并發(fā)編程,據(jù)我所知目前國內(nèi)能掌握此項技能的人鳳毛麟角。
  • 不要以為加鎖就萬事大吉了,你會在死鎖問題上栽個大跟頭。當你的程序邏輯復雜后,鎖越來越難控制了,一旦死鎖你的程序基本上就完了。
  • 某個線程掛了那所有線程都會退出
反而在看多進程,其實就簡單的多了。
  • 配合進程間通信,基本上你可以實現(xiàn)任意的數(shù)據(jù)共享。比如利用一個進程專門存數(shù)據(jù)結(jié)構(gòu)和對象,其他進程的數(shù)據(jù)操作全部投遞到此進程來
  • 多進程不需要鎖
  • 多進程可以使用共享內(nèi)存的數(shù)據(jù)結(jié)構(gòu)實現(xiàn)一些多線程的功能。如Swoole提供的Table、Atomic可以實現(xiàn)數(shù)據(jù)共享,但成本很低。未來還會加入共享內(nèi)存隊列

所謂PHP限制了Swoole,這完全是無稽之談。合理利用Swoole提供的Table、Atomic、SendMessage/PipeMessage、Task完全可以實現(xiàn)異步非阻塞的代碼邏輯。

C++寫出來的程序性能更好?

這完全是盲目的迷信,密集計算的程序C++確實是有優(yōu)勢的。而并發(fā)服務器核心是IO,并非大規(guī)模密集運算。C++從語言層面來看并沒有什么優(yōu)勢。另外C++中的大部分數(shù)據(jù)結(jié)構(gòu)在PHP中都有對應的實現(xiàn),實在不行自己寫個專門的擴展也能解決之。

高并發(fā)的服務器單機能維持10W連接、每秒可處理3-5W筆消息收發(fā)。這種性能水準已經(jīng)可以應用在BAT的核心系統(tǒng)上了。

開發(fā)效率快的意義是什么?

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

標簽: 代碼 服務器 通信

版權(quán)申明:本站文章部分自網(wǎng)絡,如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:快速熟悉項目代碼

下一篇:5個Java9新特性你知道了嗎?