2012-09-20 33 views
1

我想從一個子進程中分離出來,從一個通道接收輸入數據並將結果回傳給客戶端。到目前爲止,我提出的最佳解決方案是在我的上游處理程序前放置一個OrderedMemoryAwareThreadPoolExecutor,該程序會分離另一個線程以讀取進程中的輸出並將其寫回通道。有一個更好的方法嗎?與netty異步處理I/O?

+0

檢查您的術語。 「在子進程中分離」在Linux上具有明確的含義,您希望使用獨特的pid創建新進程。但我認爲你的意思是你希望創建一個新的工作線程,並將一個Channel的工作負載交給這個線程。 threads!=進程 –

+0

我的意思是用獨特的pid創建一個新進程。作爲一個簡單的例子,我想分離'貓',將頻道數據提供給它,取回輸出並將其返回給客戶端。自動櫃員機,我不得不創建一個新的線程,產生的過程和來回鏟數據。這是因爲我不想在netty工作線程中放置阻塞代碼,我無法弄清楚如何做真正的異步子進程I/O。希望更清楚。 – spinlok

回答

0

您可以創建自己的線程池,以便在作業處理程序中提交新線程。 OrderedMemoryAwareThreadPoolExecutor是標準excutorservice的包裝。它的優點是可以計算內存成本。通過使用自己的線程池,可以更好地控制自己的邏輯。正如在netty教程中告訴的那樣,您需要爲作業處理分配一個新線程。 I/O綁定到一個隱藏在netty通道內的套接字。您需要將頻道或頻道上下文傳遞到該新線程。套接字始終存在,異步IO通過在新線程中讀/寫套接字來執行。