php是不是這樣的,當一個請求產生後,後台會產生一個相對應的線程來處理使用者請求。我不知道怎麼類比這樣的問題,還有java也是這樣的模型嘛。我是前端開發人員,研究node的時候,聽說它是單線程的。那麼它是怎麼處理大量並發請求的?
這個問題已被關閉,原因:
回複內容:
php是不是這樣的,當一個請求產生後,後台會產生一個相對應的線程來處理使用者請求。我不知道怎麼類比這樣的問題,還有java也是這樣的模型嘛。我是前端開發人員,研究node的時候,聽說它是單線程的。那麼它是怎麼處理大量並發請求的?
這跟語言沒有關係。
題主的問題如果回答起來,其實要長篇大論的。我就之這兒言簡意賅了。
處理大量並發,是跟 io 模型有關。
java: 目前實現了 jsr servlet 規範標準的大多數容器 都是用了 多線程同步模型 來處理請求。 例如著名的 tomcat,也有使用了 多線程非同步模型的 例如 eclipse 基金會的 jetty 項目。
多線程同步模型: 意味著一個請求對應一個線程,io是同步阻塞的。
php: php目前大多都是使用了 php-fpm 進程管理容器,來管理請求。這種模型是 多進程同步模型。 但是 PHP 有一個項目叫做 ReactPHP 和 使用的是 單進程非同步io 這個和 nodejs 倒是有很相似。
多進程同步模型: 意味著一個請求對應一個進程。io是同步阻塞的。
nodejs: js 跟 nodejs,就像 java 和 jee 的關係,一個 是語言,一個是 平台。 要搞清楚。 nodejs 使用的是 單進程非同步io。
單進程非同步io: 意味著,不管在多個請求都是一個進程處理,io 的非阻塞非同步。
非同步 io 天生具有大輸送量的優勢。這種模型最開始是因為資料庫的需要誕生。這裡就不扯太多,因為還有很多作業系統的事。
非同步 io 指的是 io 模型,而 單進程,單線程,多線程指的是計算模型,但是 io 模型和計算模型 與生俱來 就是分不開的,因為 io 的等待回阻塞線程。而非同步io是沒有等待的,所以非同步 io 是不會阻塞線程的。 nodejs 雖然是單進程單線程,但是也具有驚人輸送量的原因,就在於此。
大規模並發,大輸送量 其實就是 io 的情境。
不阻塞 cpu 就意味著 單位時間 能處理更多的請求。 更多的的就不廢話了。 在各個問題水太深。就說到這裡把。
php-fpm就不會產生一個想對應的線程來處理,而是你可以配置啟動幾個work去處理使用者請求。
nodejs 單進程多線程,每個請求對應一個線程
php 多進程,每個請求對應一個進程
題目不清晰,你到底是問php的困惑還是node的困惑