最近在學習高并發,關于php的運行機制,我有點疑惑。我自己是這樣認為的: 比如 php接受一個請求,運行5秒鐘(夸張點說),那么10:00 的時候如果同時有5個請求連接php , 那么是不是 其中一個請求首先被執行,然后其他4個處于阻塞(等待)中 ? 10:05 第一個請求執行完畢,然后執行第二個......10:00 第一個開始執行10:05 第二個開始執行10:10 第三個開始執行。。。這這樣的嗎 ? 還是說 php 像 比如 瀏覽器這樣,可以同時開多個窗口同時處理呢 ?
2 回答

料青山看我應如是
TA貢獻1772條經驗 獲得超8個贊
PHP是屬于多進程模型
在PHP開啟進程的時候,就會啟動配置的marster進程及相應的配置數的worker進程,如:
root 1051 0.0 0.2 274644 5588 ? Ss 2月19 2:57 php-fpm: master process (/usr/local/php/etc/php-fpm.conf) www 1063 0.0 0.8 282620 15744 ? S 2月19 0:42 php-fpm: pool www www 1065 0.0 0.7 281080 13724 ? S 2月19 0:41 php-fpm: pool www www 1071 0.0 0.7 280824 14092 ? S 2月19 0:40 php-fpm: pool www www 1072 0.0 0.6 279536 12836 ? S 2月19 0:44 php-fpm: pool www www 1076 0.0 0.7 281080 14328 ? S 2月19 0:41 php-fpm: pool www www 1077 0.0 0.7 280828 14124 ? S 2月19 0:42 php-fpm: pool www www 1083 0.0 0.7 281084 14440 ? S 2月19 0:41 php-fpm: pool www
php-fpm master進程負責創建和管理woker進程,同時負責監聽listen連接,master進程是多路復用的;woker進程負責accept請求連接,同時處理請求,一個woker進程可以處理多個請求(復用,不需要每次都fork一個woker進程),但一個woker進程一次只能處理一個請求。
至于worker進程的配置,你可以再詳細去了解一下。

慕森卡
TA貢獻1806條經驗 獲得超8個贊
PHP-FPM下,一個進程同一時刻只能處理一個請求,請求結束后不會關閉進程,但進程會釋放資源。
你可以這樣理解,每來一個請求,PHP-FPM的工作進程會調用內置的PHP解釋器執行腳本處理請求,完成后釋放資源接著處理下一個請求,但工作進程本身是支持后臺常駐的。
另外,如果PHP跑在Swoole下,則PHP邏輯是常駐內存的,即PHP里的全局資源,包括定義的全局變量、函數、類,則都是常駐內存的。
- 2 回答
- 0 關注
- 378 瀏覽
添加回答
舉報
0/150
提交
取消