環(huán)境workman協(xié)議http://127.0.0.1:8081,Nginx代理跳轉(zhuǎn)到8081,tp5+workman,開(kāi)8進(jìn)程,業(yè)務(wù)對(duì)外curl請(qǐng)求銀行項(xiàng)目,超時(shí)3秒;同一時(shí)間并發(fā)300+請(qǐng)求,都未超時(shí),想請(qǐng)教一下此時(shí)wookman的8進(jìn)程是否只能并發(fā)處理8個(gè)請(qǐng)求,后面的是否都需要排隊(duì)?4核4線程CPU怎么發(fā)揮?和Nginx+php+fastcgi比起來(lái)處理速度怎么樣,fastcgi可以動(dòng)態(tài)生成work是不是會(huì)好一點(diǎn)?
如果workerman里業(yè)務(wù)用curl,8個(gè)進(jìn)程只能并發(fā)處理8個(gè)請(qǐng)求,也就是一個(gè)進(jìn)程處理完一個(gè)請(qǐng)求后,才會(huì)處理下一個(gè),后面的請(qǐng)求排隊(duì)。
如果curl改成workerman/http-client,8個(gè)進(jìn)程可以并發(fā)處理更多的請(qǐng)求,每個(gè)請(qǐng)求不用排隊(duì),workerman會(huì)并發(fā)處理。
如果業(yè)務(wù)是調(diào)用curl的話,性能瓶頸在curl,理論上 nginx+workerman
比Nginx+php+fastcgi
稍好一些,但是效果差別不大。如果workerman使用workerman/http-client
則并發(fā)要比Nginx+php+fastcgi
好很多。
mysql的話直接用同步阻塞就可以了,因?yàn)閙ysql連接數(shù)是瓶頸,mysql默認(rèn)連接數(shù)一般是100,雖然可以調(diào)高,但是調(diào)高后mysql連接數(shù)過(guò)大直接影響mysql性能。一個(gè)請(qǐng)求假設(shè)發(fā)起3個(gè)異步mysql請(qǐng)求,就占用了3個(gè)mysql連接,300并發(fā)請(qǐng)求可能直接占用900mysql連接,即使你用了mysql連接池,假設(shè)連接池上限100個(gè)mysql連接(已經(jīng)很多了),300并發(fā)打過(guò)來(lái)還是要排隊(duì),所以mysql異步解決不了多大問(wèn)題。使用異步+mysql連接池和多開(kāi)一些進(jìn)程+mysql單例+阻塞訪問(wèn)mysql效果其實(shí)差不多,但是明顯mysql單例阻塞式訪問(wèn)代碼更簡(jiǎn)單,更穩(wěn)定。
非常感謝。websocket協(xié)議下processes設(shè)為1時(shí)onmessage中收到用戶并發(fā)請(qǐng)求也是同理(同時(shí)只能處理一個(gè)請(qǐng)求)?
項(xiàng)目同時(shí)用到了,http和websocket,笨拙的寫(xiě)了個(gè)共用處理邏輯的框架。
有一點(diǎn)不清楚,就是websocket協(xié)議下processes設(shè)為1時(shí)onmessage中收到用戶并發(fā)請(qǐng)求也是同理(同時(shí)只能處理一個(gè)請(qǐng)求)?