2014-11-09 78 views
2

我有3個異步服務器和客戶端相互連接,就像一個鏈。處理多個線程的單個連接

甲請求經過3系統等

=> System 1 => System 2 => System 3 =>

和響應

=> System 3 => System 2 => System 1 =>

我在每個這種系統的邏輯,以加入與該響應正確的要求。用這個邏輯,我設法按照不同的順序處理響應和請求。

今天我只有一個系統之間的單一連接。我注意到只有一個線程被使用,並且性能不好... :(

是否有任何配置強制每個連接使用多個線程? 這是解決此問題的正確方法嗎?或者,我必須有各系統之間的連接池?有網狀某種此池或我有我自己實現它?

我使用的是網狀5.

非常感謝。

回答

1

請參閱Netty wikis以獲得關於線程模型的一般描述。總結Netty 4。 0+不會將併發性引入通道處理操作。看看大部分的netty examples,你會注意到因爲這個而缺乏同步。同時在頻道上運行會給與框架交互的框架和界面帶來更多的複雜性。

我認爲問題在於您的使用案例支持是否在多個渠道之間進行拆分?這取決於很多因素,但如果算法和數據支持並行化,那麼您可能會看到整體吞吐量的提高。

Netty確實提供了ChannelGroup,但我不確定這是否適合您的用例。

+0

感謝您的回覆。 問題一: 如果netty假設以這種方式工作。在仔細閱讀文檔並發表評論之後,我認爲答案是肯定的。 第二個問題是: 如果我們假設我的數據和用例允許建立多個連接,那麼我應該創建多個連接(全部是異步)還是隻創建一個? 我恢復了,netty可以很好地利用CPU和它們的多核心連接,而且只有一個連接不會太多? – Mauricio 2014-11-10 23:06:29

+2

你正在解釋這個答案。 1)Netty沒有單個通道的併發性。 2)Netty旨在處理許多渠道。您的應用程序必須提供有關如何使用這些渠道的設計和實施。集合是另一種選擇。 [對象池](http://en.wikipedia.org/wiki/Object_pool_pattern)和[連接池](http://en.wikipedia.org/wiki/Connection_pool)是一種擁有自己權利的模式,您可以閱讀了解何時/爲什麼他們有益(或提出另一個問題:))。 – 2014-11-11 00:30:59

+0

雖然相當長一段時間,但我發現這個問題與我的服務器有一個或幾個客戶端的要求相關,但這些客戶端會產生大量流量。是否可以在流水線中的通道處理程序中使用多線程'EventExecutor',以便通過'EventExecutor'線程池實現併發性而不是通道'EventLoop'?它是否會確保來自客戶端的一條消息將由一個線程通過所有處理程序處理,而另一個線程則處理下一條消息?有沒有樣品來源? – 2018-01-19 18:10:30

相關問題