2010-01-28 50 views
2

我正在開發一個用於創建各種規模高效應用程序的框架。應用程序由模塊組成(應用程序也是一個模塊),性能對我很重要。我知道現有的模塊化框架等,但我需要實現我自己的。儘管我對個別模塊的性能進行了顛覆並對它們進行了優化,但是對象之間(以及線程之間)之間的通信卻是我無法決定如何實現的。這裏有一些選擇我認爲:Java對象之間的有效通信

  • NIO管道
  • 活動(註冊監聽器)在應用程序上下文
  • 事務隊列

我的問題是, 其中哪一個是更好的避免瓶頸和鎖?或者有什麼替代方案可以提供建議?

+0

我不知道爲什麼有人投票關閉這個。這是一個真正的問題。他問的是各種Java通信機制之間的權衡,並研究了一些替代方案。似乎對我有效。 – 2010-01-28 22:33:31

+0

沒有足夠的信息提供有意義的建議。這些應用程序是否位於同一個JVM,同一臺機器,局域網上的不同機器等?應用程序是否交易?他們是否需要在交易中進行協作?該框架支持哪些通信原語:RPC,異步消息傳遞,數據流?什麼同步原語? – 2010-01-28 22:35:57

+0

我認爲我給自己說的例子說明了一切;管道,事件...這些只是雙向溝通的例子。例如, 假設我有一個主類和一個管理對象。需要雙向通信:主類向管理器對象提交緩衝區進行處理並繼續執行,當管理器中的進程完成時,結果將發送到主類。我可以使用管道發送和檢索數據,或者可以通知附加的事件對象結果的註冊偵聽器,或者我可以從等待隊列中彈出等待緩衝區,處理它並將其存儲在結果隊列中。 – 2010-01-29 00:30:13

回答

0

如果這是一個打算導致生產質量代碼的項目,我強烈建議你而不是實現你自己的框架。首先,顯然你並沒有真正瞭解你的應用程序需要什麼樣的框架,或者你可以使用各種技術來實現這樣的框架。不要低估你對知識的缺乏,以及在你開始時不知道自己在做什麼的項目的風險。

其次,您實施自己的框架的動機是錯誤的。如果您發現現有的框架對於您的需求來說過於龐大而複雜,您可以選擇一個更簡單的框架,或者只是學習完成工作所需的子集......而忽略其餘部分。

三,設計和建造一個半體面的框架很多工作。這可能是您花費構建實際應用程序的時間。當然這很有趣,但你的老闆可能對結果更感興趣。第四,不要低估使用許多其他人使用的框架的內在優勢;第四,不要低估使用許多其他人使用的框架的內在優勢;第四,不要低估使用許多其他人使用的框架的內在優勢;例如一個社區可以提出問題(比如SO),一個社區來改善框架,就業人員的簡歷框架。

最後,通過實施自己的框架,您最有可能爲團隊/公司創造大量額外的未來維護工作。你錯了,你的同事們會在未來10年咒罵你在走廊上下。即使你的框架100%正確,你組織中的某個人仍然需要在依賴它的應用程序的整個生命週期中進行維護。

+0

我實際上是一名學生。我開發的框架是實現服務器的一個API,它將專注於一項工作。我知道關於http實現和cdns。我已經寫了幾乎所有的東西。在閱讀你寫的內容之後,我決定使用osgi進行模塊化。我的服務器正在使用通道和選擇器來讀取請求,然後將它們作爲選擇鍵傳遞給http解釋器。當服務器產生響應時,它被寫回到客戶端。我無法找到一種方法來發送回應,但它看起來像響應準備就緒。它看起來像我所要做的就是將鍵設置爲寫入。 thnx – 2010-01-29 03:59:41

+0

不是每個節目都有老闆的人,或者沒有看到「有趣」作爲做事的正當理由。 – 2010-02-09 21:15:06

+0

@Bart - OP顯然不是爲了好玩而做的。他現在可能有也可能沒有老闆,但他肯定要考慮做一些可能使他的項目失敗的後果。在這種情況下,結果可能是他沒有通過課程。此外,作爲一名學生,他還應該學習用專業開發人員/經理的思維去思考。最後,他需要諮詢替代方案,「使用現有框架」是最佳選擇。 – 2010-02-09 22:41:35

2

有太多變數。要知道的唯一方法是以可插入的方式編寫消息傳遞系統,以便在編寫代碼時以不同的方式編寫代碼並進行測量。

遺憾的是,你已經拋出使用框架,大多數會比任何你可能寫自己的東西更快,更完整和更有用。提出這一要求的人應該面對並可能被解僱。

+0

和更復雜和繁瑣:)我只需要一個簡單的機制 – 2010-01-29 00:05:53

+0

雖然我明白你不願意學習似乎有很多功能的框架,但我一直髮現,當我不認爲我需要的功能像這樣的框架,這是因爲我沒有像框架實現者那樣花費太多時間來理解問題 - 最終你必須在你自己的框架中實現這些功能。 – 2010-01-29 18:21:36

1
i am developing a framework for creating efficient applications in all sizes 

舉個很普遍的意見,我會建議你潛入JBoss的源代碼來獲得的印象如何時,他們都應該工作(也許你可以得到最老版本的事情是由作爲出發點)

3

我唯一的建議就是不要這樣。正如Bill K已經說過的那樣,大多數實施將會更快更完整。更重要的是,有很好的資源可以實現你想要做的事情:OSGi,例如Eclipse和Glassfish v3。

就我個人而言,我實現了類似於您的描述的內容,在運行時加載插件而無需重新啓動容器。維護和調試是一場噩夢。更重要的是,雖然實現新模塊相對容易(畢竟,我設計了這個模塊),但編程很難。我最終學到了很多關於類加載器的知識,但就是這樣。

+1

+1 - 第一句話。特別是因爲你必須首先提出這樣的問題! – 2010-01-28 22:42:23

+0

+1我也一樣,這就是指出事情已經完成的工作示例的原因。 – stacker 2010-01-28 22:44:31

+0

@stacker - 我們甚至不知道OP是在詢問關於web的東西,所以我們如何知道哪些示例是相關的? – 2010-01-28 22:49:50