2012-02-08 76 views
1

我有一個需求,我需要讀取文本文件,然後轉換它並將其寫入其他文件。我希望以並行的方式做到這一點,如一個線程讀取,一個用於轉換,另一個用於寫入。
現在要分享線程之間的數據我需要一些渠道,我正在考慮使用BlockingQueue,但希望探索一些其他(更好)的選擇,如果可用的話。
番石榴有EventBus,但不確定這是否符合要求。從性能的角度來看,還有哪些其他的選擇是可行的,哪一個是最好的。
線程之間共享數據的通道

回答

2

除非你的改造步驟是真的是密集,這可能是浪費時間。

想想這樣。你在問什麼?

你問的東西,

  • 提取數據的輸入流
  • 將其複製到另一個線程
  • 呈現給該線程的數據的輸入流

什麼數據結構最能代表步驟3的數據流? (提示:這是您開始使用的InputStream!)

前兩個步驟的值是多少? 「轉換」線程可以從磁盤讀取,就像通過另一個線程從磁盤讀取一樣快。加入中間線程不是加速磁盤讀取。

你會開始考慮增加另一個線程時

  1. 你的問題可以有效分爲工作的獨立作品(比如,每個線程的工作文字
  2. 分裂的成本的一大塊問題轉化爲這些作品顯着小於比添加額外的線程和它們之間的協調(這是小的,但不是免費的!)的開銷
  3. 該問題需要更多的資源比作爲單CPU可以提供(一個線程可以訪問更多的CPU資源,但在I/O吞吐量方面不會提供太多價值)
+1

轉換很少密集(因爲它包含大量的驗證,轉換,過濾等等),並且不能與閱讀器杵在一起,因爲它遵循一些特定的規則來閱讀。 – Premraj 2012-02-08 08:18:24

+0

然後,您可能需要更好地描述您的問題以獲得有用的回覆。我認爲正如所說的那樣,提出具體的改進是過於籠統的問題。 – 2012-02-08 18:28:06