2012-06-11 26 views
2

通常情況下,您會調用服務,直到池中的線程可用,然後返回結果爲止。Netty中的異步編程如何工作?它會讓事情變得更健談嗎?

隨着Netty或期貨的一般情況下,您不會立即阻止並返回。只有當你確實需要你調用.get()的值或API時,你纔會阻塞,直到你接收到數據爲止。

在處理服務或客戶端/服務器模型時,這意味着您在進行異步操作時會更加連接/斷開連接。編程正確? (有沒有阻止的好處)。

這是正確的嗎?

Netty基本上是使用SEDE(分階段事件驅動架構)和使用Java的NIO數據類型設計的。

回答

8

使用Netty的異步意味着,管理連接和操作推I/O各地在單獨的線程中執行和原始調用方隨後通知請求的操作的結果,或感興趣的聽衆是當有數據可供讀取時調回。

您的應用程序線程可以阻止您是否需要它們,但這不是必需的,因爲您可以定義一個將在異步操作完成時執行的回調。

當服務或客戶端/服務器模型處理,這意味着你將服務器連接/斷開多個這樣asych 編程正確時? (有沒有阻止的好處)。這是 是否正確?

幾乎沒有該段是正確的。

我推薦this tutorial作爲對這些基本概念的更好的解釋(完全公開,我寫了它)。

+0

優秀,這是一個偉大的寫作感謝我會看看結束。順便說一句,你認爲這個模型總是比使用線程池更具可擴展性嗎?怎麼能證明這一點? – loyalflow

+1

好吧,它*使用線程池,但如果你的意思是,它會比使用單獨[線程池]線程中調用的傳統阻塞I/O更具可擴展性,恐怕我必須給你股票的答案: 這取決於。非阻塞NIO(如Netty)的硬特性是消除了Thread-Per-Connection並消除了吸取帶寬和CPU的輪詢類型函數。軟件功能更加分散,但我認爲Netty流水線和編碼器/解碼器架構適用於非常高效的網絡I/O處理,但它不是NIO獨有的。明白我的意思了嗎 ? – Nicholas

+0

Sort of :)期待第2部分將理論融入現實世界中,如ajax和Web上的長輪詢。謝啦! – loyalflow