這實際上可能涉及客戶的一般情況,使用Bootstrap
- 顯然這個組是所有客戶需要的。爲什麼通過LocalChannel連接的客戶端需要EventLoopGroup?
但是,如果你有多個客戶端運行在一個JVM上,你真的吃掉了很多內存,爲每個客戶端創建一個EventLoopGroup
,並且可以很容易地自己做OOM。
我能夠通過在JVM中的所有客戶端之間共享全局EventLoopGroup
來解決此問題,並使用引用計數來確保其乾淨地被插入並銷燬,但這看起來更像是一種比預期設計更好的解決方法。
而且似乎沒有任何使用單線程執行程序的實現,它可以串行執行客戶端的調用;我認識到它與Netty的異步本質有些不一致,但它是一個合法的用例。
我去引用計數的方法,因爲在第一次每個客戶端是創造自己的EventLoopGroup,並且這是產卵很多客戶打一個遠程服務器負載測試,吃掉了一噸的內存,即使在單線程的。我可以將一個全局事件組注入到客戶端,並讓它以這種方式重新使用,但參考計數是一種更簡單的方法。 – Michael
有關您的用例對Netty方面有何改進的建議? – trustin
如果組是可選的,那會很好。至少對於我來說,客戶端的線程池太重了,我只是需要一種解決方法來加載測試。或者,如果有一種簡單的方法來指定某種類型的CalllerRuns組,類似於ThreadPoolExecutor.CallerRunsPolicy,這可以正常工作。客戶已經在他們自己的線程中。最後,如果有一種簡單的方法來創建一個包裝現有ExecutorService的組,那麼我可以單獨管理,這將是有用的(授予類似於我現在所做的) – Michael