国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

# webman 和 workerman 在運行模式上是否有所區(qū)別?

staraxy

webman 和 workerman 在運行模式上是否有所區(qū)別?

對于 workerman 的疑問

按照我的理解,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)該是可以做到的吧?。希望有人能夠回答我的疑問,十分感謝。

對于 webman 的疑問

如果上面所說 workerman 可以做到,那么既然 webman 是基于 workerman 的,webman 在處理請求時也是不是也能夠做到:

第一個用戶的請求還未徹底完成,沒有釋放連接(在等待某些異步非阻塞 IO 結(jié)果)的情況下,開始去處理第二個用戶的請求,然后等到第一個用戶的異步非阻塞 IO 有結(jié)果時,去通知回調(diào)返回給第一個用戶響應(yīng),然后再接著去處理第二個用戶的請求?

我之前一直認為 webman 是基于 workerman 的,那肯定是可以的,直到我無意中看到一篇文章:workerman - webman 體驗及性能壓測 - 個人文章 SegmentFault 思否 。這篇文章中講到 webman 是多進程阻塞的,而且并沒有 workerman 的事件循環(huán)(eventloop)。

和我之前的認知有很大的不同,就產(chǎn)生了一些疑問:

  1. webman 有 workerman 那樣的事件循環(huán)嗎?如果有的話,為什么這篇文章中說 webman 是阻塞的,沒有 eventloop ?

  2. 在 webman 中,如果我在處理第一個用戶請求的時候使用了異步非阻塞 IO ,那么這個進程可以在第一個用戶請求還沒有完成,連接還沒有釋放的情況下去處理第二個用戶的請求嗎?

  3. 還是說在第一個用戶請求還沒有徹底完成返回響應(yīng)的情況下,即使使用了異步非阻塞 IO ,當前進程閑置(不知道這樣說是否合適),也無法去處理第二個用戶的請求,使用異步非阻塞 IO 只不過加快了單次請求的處理速度?

  4. 還是說不管是否使用異步非阻塞 IO ,不管當前進程是否空閑,只要第一個用戶的請求沒有完成返回響應(yīng),就無法去開始處理第二個用戶的請求?

網(wǎng)上看了很多文章,或許是因為問題過于簡單?并沒有找到任何比較明確的答復(fù)。我相信應(yīng)該不止我一個人會有這些疑問。

1592 2 1
2個回答

胡桃
  1. 有;事件循環(huán)只是實現(xiàn)用戶線程(協(xié)程)的基礎(chǔ),然而絕大部分玩家在使用Workerman處理IO時還是用的PHP原生的阻塞函數(shù)。所以真實原因是他自己只會用阻塞函數(shù),然后說Webman是阻塞的。
  2. 可以。(現(xiàn)在就是,建議閱讀Workerman源碼。)
  3. 異步不能提高單次請求速度。如果一個請求涉及到讀取數(shù)據(jù)庫,將耗時0.1秒,異步只是將等待的數(shù)據(jù)庫的0.1秒主動讓出去執(zhí)行其他用戶線程,而不是讓CPU空轉(zhuǎn)0.1秒,這個完整的請求還是需要至少0.1秒才能響應(yīng)給客戶端。
  4. 否。你說的是FPM。

恐怕只有你一個人有這些疑問。

nitron

異步只是提高單位時間內(nèi)的吞吐量,不能提高單次處理速度

  • staraxy 2024-01-11

    有可能用戶的一次請求,會需要多個數(shù)據(jù)庫的查詢操作,然后合并這多個查詢操作的結(jié)果組成 json 響應(yīng),返回給用戶。那你說對于這單次請求的兩個不同數(shù)據(jù)庫的查詢操作而言,是同步阻塞執(zhí)行這兩個查詢操作的速度快還是異步執(zhí)行這兩個查詢操作的速度快。

  • nitron 2024-01-11

    理想狀況是異步快

  • nitron 2024-01-11

    但是總耗時是不會變的,合并耗時+多次查詢耗時

  • staraxy 2024-01-11

    那么如果是同步阻塞的話是不是意味著第一次查詢發(fā)起之后,要等待第一次查詢完成,才能去進行第二次查詢,這種同步阻塞情況下是不是會有一段等待第一次查詢完成的時間。

  • nitron 2024-01-11

    是的,但我感覺你還是沒理解我表達的意思

  • staraxy 2024-01-11

    你想表達的應(yīng)該是對于程序的執(zhí)行而言,程序非空閑時間的總和是不變的。我想說的是單個請求從請求到整個響應(yīng)所花費的時間。

年代過于久遠,無法發(fā)表回答
??