golang和swoole區(qū)別
開發(fā)效率 (推薦學(xué)習(xí): swoole視頻教程)
Go語(yǔ)言是本質(zhì)上是靜態(tài)語(yǔ)言,開發(fā)效率稍差,但性能更強(qiáng),更適合底層軟件的開發(fā)
Swoole使用PHP語(yǔ)言,動(dòng)態(tài)腳本語(yǔ)言,開發(fā)效率最佳,更適合應(yīng)用軟件的開發(fā)
IO模型
go語(yǔ)言使用單線程eventloop處理IO事件,多線程實(shí)現(xiàn)協(xié)程調(diào)度,執(zhí)行用戶層代碼
swoole使用多線程eventloop處理IO事件,多進(jìn)程執(zhí)行用戶層php代碼
Go對(duì)與IO事件的處理是單線程的,無(wú)法利用多核,吞吐量稍弱于swoole
在實(shí)際的TCP/UDP密集IO壓測(cè)中,swoole表現(xiàn)要稍優(yōu)于go
Go協(xié)程(goroutine)是運(yùn)行在多線程上的,線程可以共享堆棧和文件描述符,功能更強(qiáng)大,在實(shí)現(xiàn)連接池、并發(fā)庫(kù)方面更有優(yōu)勢(shì)。額外的帶來(lái)的一個(gè)問題是,存在數(shù)據(jù)同步問題,需要用戶自行考慮加鎖。
Swoole的用戶代碼運(yùn)行在多進(jìn)程環(huán)境,無(wú)需考慮加鎖問題。但無(wú)法直接訪問內(nèi)存和資源。需要借助Task進(jìn)程實(shí)現(xiàn)中轉(zhuǎn)。
語(yǔ)言性能
go語(yǔ)言是靜態(tài)編譯的,語(yǔ)言本身的性能大大超過php,密集計(jì)算更有優(yōu)勢(shì)
php是動(dòng)態(tài)解釋執(zhí)行的,語(yǔ)言性能較差,不適合密集計(jì)算程序
將密集計(jì)算、大量調(diào)用的代碼使用C擴(kuò)展實(shí)現(xiàn)可以解決部分PHP性能問題