2012-03-12 51 views
0

我有一位管理人員來管理員工。和工作人員做很多工作要求。如何簡化這個軟件架構?

管理器是一個程序,監控所有的工人,並通過TCP端口與工人溝通。我爲不同的工作人員創建了許多線程,例如,數據收集工作人員,爲執行該工作的單獨線程負責數據收集。只有管​​理者可以和工人溝通,管理者可以檢查工人的狀態。所有的工作要求都必須由經理向工人分配工作要求。

Worker是一個運行while true循環的實例,它打開一個TCP端口,允許管理員爲其分配工作請求。並且每個工作請求都被分配,一個新線程將分配來處理工作任務。工作請求完成後,結果將發回給經理。

所有數據通過TCP套接字在管理器和工作人員內通信。所有這些都使用java來實現。數據將是一個二進制數據。

但是我的問題是,在這個架構中是太多線程還是太複雜?例如:

用戶 - >分配工作任務 - >管理器(保持多個與工作人員相關的線程)--->爲工作人員分配工作任務--->(每個工作任務可能涉及多個工作任務工作者,更復雜,可能是同步或異步工作任務) - >如果這是同步工作任務涉及兩名工作人員,則會打開兩個新線程並執行。

如您所見,只有一個用戶請求可能涉及3個以上的線程。如果有很多用戶,線程數將會增加很多。或者有任何建議讓它更簡單?謝謝。

+0

這些系統/線程 - 它們是否分佈在許多聯網的盒子上? – 2012-03-12 09:27:07

+0

它可能也可能不會。當工作人員的工作量非常大時,可能會使用單獨的服務器來運行它。 – DNB5brims 2012-03-12 09:29:58

+1

你有沒有看過像Akka(http://akka.io/)的東西? – nwinkler 2012-03-12 09:36:58

回答

0

我建議你考慮thread pool pattern或通知線程管理器模式,因爲你所描述的問題可以通過智能管理大小恆定的線程池來解決。但是,您將需要應用少量自定義,以使其最適合您的特定問題。