首頁  >  文章  >  後端開發  >  javascript - 一個頁面中如果存在多個ajax訪問後台,此刻後台是單線程的嗎?還是多執行緒

javascript - 一個頁面中如果存在多個ajax訪問後台,此刻後台是單線程的嗎?還是多執行緒

WBOY
WBOY原創
2016-08-18 09:15:491630瀏覽

如果後端採用的是thinkphp框架,頁面多個ajax存取後台伺服器,後台伺服器此時是非同步單執行緒還是多執行緒操作?求了解的朋友能跟我說說

回覆內容:

如果後端採用的是thinkphp框架,頁面多個ajax存取後台伺服器,後台伺服器此時是非同步單執行緒還是多執行緒操作?求了解的朋友能跟我說說

預設是多進程非多執行緒,一個行程處理一個請求。 php多執行緒需要安裝擴充實現,但是還是同一行程接收一個http請求,除非自己用php實作個web伺服器,然後分送請求用多執行緒處理,就可以實作一個執行緒一個請求。
apache預設是prefork工作模式,php作為一個module模組,一個請求新建一個進程回應,最大進程數取決於apache配置。 nginx是透過fast-cgi與php-fpm通訊,也是一個請求一個進程,最大進程數取決於php-fpm配置。
如果一個請求後端處理時間過長阻塞了,此時多個相同請求把進程數量開滿了,後面所有請求就會出現等待可用套接字情況

這個取決你的伺服器端,是單線程還是多線程,甚至多進程。

我理解的單線多執行緒是這樣的,

例如你用一個表單上傳文件, 這只是一個請求, 你只發起了上傳文件這一請求, 伺服器在收到你的上傳文件請求後, 發現你的這文件可真大啊, 他想要是自己一個人扛的話估計晚上10點都不能下班, 然後就自動(fork)了一些幫手, 相當於產生了一些新的線程, 來幫助他完成文件上傳,多人協作肯定很快了, 所以你分分鐘就完成了你的大檔案上傳, 這就是多線程,

單線就是一個人苦逼的處理到天亮吧,

所以, 伺服器是否是單線程或是多線程的, 不取決於你client發起的多少請求, 客服端同時發起一萬個請求(無論同步還是異步), 這叫並發, 和多線程沒什麼關係得,

單線程是無法實現並發請求的。

可以腦補這樣一個場景:用戶的下行速度是 1k,然後請求了一個 1M 的圖片,如果伺服器單線程的話,下一個請求要等 17 分鐘才開始回應,顯然不可能讓你這麼玩。

所以 Web 伺服器必然是多執行緒。

線程數方面,一般是4 以上的個位數,不過這個是瀏覽器的限制,單頁面發起的請求數是有限制的,多了會扔進列隊裡等,這就是為什麼有時候也個頁面引用了Google的CDN 文件,卻連網頁圖片也卡了載入不出來的原因。

我疑惑的事情是這樣的:我疑惑的是apache+php是阻塞的,nginx+php是異步的。所以如果是apache伺服器的話,php那邊是阻塞的回應ajax請求嗎?

php是單進程單執行緒模型。 你說的ajax請求,也相當於一個http請求,所以不存在多線程之分。 js的ajax卻是非同步請求實現的! ! !

client 端並發跟server端處理請求方式(單線程,多線程)取決於應用場景,大多數場景下,server端並行非阻塞

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn