2013-10-06 38 views
0

我建立一個彙總程序,我需要一個管道實現。 我已經使用了自己的實現,但隨着工作的增長,我發現它不會被削減。多線程管道的Java(7)

有沒有在java中一個成熟的框架,爲我提供了基礎(基本同步邏輯)?

我需要聲明一個階段,每個階段都有工人,工人處理項目及結果重返舞臺,將其傳送到下一階段(力量扇出)。

我實現的全部意義不過是給我這個基礎就無法正常工作(競爭條件帶來死鎖)

我試着讓apache的庫(這基本上是死的)但它不具備創建舞臺工作者的功能。

+1

你爲什麼不直接給每個工人打電話?你知道使用多線程比使用一個線程更快嗎? –

+0

我有n個階段,每個階段都有m_n個工人,每個工人在一個單獨的線程上運行以最大化效率。某些階段扇出(輸出到超過1階段)。我的實現一直工作到昨天,但是,停止工作,我似乎無法找到該錯誤。我對它感到沮喪(它有太多的錯誤,並不是我項目的直接部分),並希望找到有存貨溢出的人的建議。 [鏈接](http://bitbucket.org/nocgod/parallel-pipeline-processing-library)這是我的圖書館,缺乏泛型,並不能解除。 –

+1

這是我的觀點,你有沒有衡量它是最大化效率還是最大化開銷?如果您還沒有完成這項研究,並且最終的代碼更加複雜且不可靠,那麼您可以添加比多線程更多的開銷。 –

回答

0

只需將您的所有階段都與阻塞隊列連接,然後一切都將可靠地工作。如果生產者的工作速度比消費者快,則使用有界的ArrayBlockingQueue以避免隊列飽和。

大多數管道/數據流/演員框架處理任務,小到一個階段,甚至分配一個線程將是一個開銷這麼階段共享一個線程池,所以有工作線程數限制。 (可能)每個階段利用幾個線程的唯一框架是FBP,但我不確定。

+0

如果你偷看我的圖書館,你會看到我所做的。每個階段都與下一個階段相結合,數據流經Observer模式(也許我應該通過下一階段的阻塞隊列?),並且我爲整個程序使用一個包含8個線程的單個線程池,我不浪費時間創建/銷燬線程。 –

+0

我已經下載了你的庫,但沒有發現任何測試或示例,所以很難恢復它應該如何使用,因此實現是否正確遵循這個想法。 –

+0

是的,我沒有創建任何示例,因爲我是唯一的用戶或此庫...對不起... –