背景
go比php可支持的并發(fā)數(shù)更高,為什么
目標
分析點:
- 系統(tǒng)的并發(fā)瓶頸
- go語言的并發(fā)瓶頸
- php語言的并發(fā)瓶頸
系統(tǒng)并發(fā)
參考:https://juejin.cn/post/6844904025553534990
- 提到并發(fā),我們這里指的是web服務
- web系統(tǒng)的第一層,是nginx
- web系統(tǒng)的并發(fā)瓶頸一般在DB上
go和php并發(fā)對比
- 語言
- go是編譯性,直接生成可執(zhí)行的字節(jié)碼
- php是解釋性,執(zhí)行時需要動態(tài)解析
- fpm可以設置緩存解析后的字節(jié)碼
- 線程與協(xié)程
- fpm是多進程單線程
- 參考:https://www.jianshu.com/p/3b7aed0a800d
- 子進程需要資源多
- go是利用協(xié)程提高并發(fā)
- GPM中,P是線程級別的,P調用G,G是協(xié)程級別的
- fpm是多進程單線程
- 切換
- fpm單進程阻塞之后,內核會去處理其他的,這里是進程切換
- go的goroutine阻塞之后,P會取尋找其他G來執(zhí)行,一般不會發(fā)生線程切換
- 內存
- 一個php-fpm進程占20M
- go的協(xié)程內存是kb級別的
記憶點:fpm進程和gorotine協(xié)程,資源消耗、切換、阻塞情況文章來源:http://www.zghlxwxcb.cn/news/detail-800450.html
附錄
fpm
參考:https://www.php.cn/php-weizijiaocheng-455614.html文章來源地址http://www.zghlxwxcb.cn/news/detail-800450.html
- php+nginx工作流程
- nginx接到請求
- nginx轉發(fā)給php
- php的fastcgi的master收到請求
- cgi只有一個php進程,它讀取php.ini的配置,啟動,并服務
- fastcgi
- 有多個進程,master進程讀取配置,啟動,后續(xù)的worker進程無需再次讀取配置
- master把請求給worker進程
- worker進程服務
- nginx并返回
- fpm是用來管理fastcgi的進程的
到了這里,關于GO——與PHP的并發(fā)對比的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!