按照我的理解,workerman 的運行模式應(yīng)該是 多進程+eventloop(事件循環(huán)) 的事件驅(qū)動編程模型,每個進程都有自己的事件循環(huán)隊列,以此來達到異步非阻塞,一個進程能夠同時維持上千條連接的效果。
那么 workerman 應(yīng)該是真正意義上的異步吧?,我的疑問是:
當前進程如果收到了第一個用戶的請求,然后為了處理這個用戶的請求,此進程又向另一臺服務(wù)器發(fā)起了一個異步請求。
在等待該異步請求的響應(yīng)的這段時間,第一個用戶的請求還未完成,那么這個進程是否可以去處理第二個用戶的請求,在收到先前那個異步請求的響應(yīng)之后再去調(diào)用對應(yīng)的回調(diào)函數(shù),給予第一個用戶響應(yīng)。
我想說的是一個進程是否可以做到一個請求還未徹底完成(該請求正在等待某些異步非阻塞 IO 的結(jié)果)的情況下就去處理第二個請求。
我覺得基于 eventloop 的 workerman 上面說的這些 workerman 應(yīng)該是可以做到的吧?。希望有人能夠回答我的疑問,十分感謝。
如果上面所說 workerman 可以做到,那么既然 webman 是基于 workerman 的,webman 在處理請求時也是不是也能夠做到:
第一個用戶的請求還未徹底完成,沒有釋放連接(在等待某些異步非阻塞 IO 結(jié)果)的情況下,開始去處理第二個用戶的請求,然后等到第一個用戶的異步非阻塞 IO 有結(jié)果時,去通知回調(diào)返回給第一個用戶響應(yīng),然后再接著去處理第二個用戶的請求?
我之前一直認為 webman 是基于 workerman 的,那肯定是可以的,直到我無意中看到一篇文章:workerman - webman 體驗及性能壓測 - 個人文章 SegmentFault 思否 。這篇文章中講到 webman 是多進程阻塞的,而且并沒有 workerman 的事件循環(huán)(eventloop)。
和我之前的認知有很大的不同,就產(chǎn)生了一些疑問:
webman 有 workerman 那樣的事件循環(huán)嗎?如果有的話,為什么這篇文章中說 webman 是阻塞的,沒有 eventloop ?
在 webman 中,如果我在處理第一個用戶請求的時候使用了異步非阻塞 IO ,那么這個進程可以在第一個用戶請求還沒有完成,連接還沒有釋放的情況下去處理第二個用戶的請求嗎?
還是說在第一個用戶請求還沒有徹底完成返回響應(yīng)的情況下,即使使用了異步非阻塞 IO ,當前進程閑置(不知道這樣說是否合適),也無法去處理第二個用戶的請求,使用異步非阻塞 IO 只不過加快了單次請求的處理速度?
還是說不管是否使用異步非阻塞 IO ,不管當前進程是否空閑,只要第一個用戶的請求沒有完成返回響應(yīng),就無法去開始處理第二個用戶的請求?
網(wǎng)上看了很多文章,或許是因為問題過于簡單?并沒有找到任何比較明確的答復(fù)。我相信應(yīng)該不止我一個人會有這些疑問。
恐怕只有你一個人有這些疑問。