2016-08-24 88 views
0

我有一個關於Netty的問題。 似乎它使用老闆eventLoop來保持接受連接,另一個工作者eventLoop繼續做數據I/O。爲什麼Netty使用boss和工作eventloop而不是一個eventloop

源代碼顯示,一個eventLoop將重複調用select/poll/epoll。所以會有不止一個eventLoop刻錄CPU。爲什麼不能netty只使用一個eventloop來處理服務器偵聽套接字和接受的套接字?

+0

http://stackoverflow.com/questions/28331809/netty-bootstrap-with-boss-group-or-with-just-with-workers-eventloopgroup?rq=1也可能幫助理解答案 – Jerrylk

回答

1

有一種稱爲SEDA的架構。 Boss eventloop的好處是:你用來接受連接的線程不會被IO線程阻塞,IO線程用於從套接字讀取數據,然後在處理程序中完成工作。您也可以使用ExecutionHandler來幫助eventloop。 Netty正在改變和改進線程建模。並且在Netty 4中改變了很多。

+0

如果我將所有邏輯執行放在ExecutionHandler中,那麼I/O線程將立即返回,我可以說使用一個EventLoopGroup作爲Boss並且Worker比使用兩個更好嗎? – Jerrylk

+0

是的,你可以。我想你可以做一些性能測試。我的猜測是:如果您的應用程序/服務器需要處理大量的併發連接,並且在每個連接上,流量不是那麼多。然後兩個會更好。或者我認爲一個人會足夠好。 –

相關問題