2012-01-02 75 views
0

我需要在java中開發一個簡單的守護進程,它從文件夾獲取文件,分析它們的內容並將一些信息存儲在數據庫中。不可避免地會爆發一些活動(例如,在惡魔未運行時累積文件),我正在尋找最有效的線程模型來儘快處理積壓。JBoss線程模型vs Java 5任務執行框架

我目前正在考慮幾個選項。

  1. 帶有Quartz的JBoss AS(v7?)。
  2. JBoss應用服務器(V7?)只用JBoss的螺紋
  3. 純Java 5的任務執行框架(的ThreadPoolExecutor)

可以在這些選項的利弊有人評論。

在一個側面說明,我也喜歡下面的相關考慮

  • 關於IBM /孫JDK到底是如何管理做出最好的多核心處理器的各自優點。我打算運行在IBM或Sun java上,運行jvm。
  • 無論JBoss是否使用java 5線程模型(以及從哪個版本開始)。

編輯 Enno Shioji回答的幾句話。

  1. JBoss在圖片中的原因是因爲存儲在數據庫中的數據通過webapp提供。這樣我的客戶可能會問「爲什麼文件解析不在AS中?」。
  2. 我同意這個過程可能是IO綁定而不是CPU綁定。然而,我急於避免的情況是,在整個os/pthread/jvm/javalib多層香草片中,糟糕的線程調度邏輯會減慢傳入文件的獲取速度。

回答

1

JBoss AS只是一個應用服務器。除非你想使用它的服務(比如JMS,WS,EJB,JPA等),否則你根本不想涉及到JBoss。這隻會讓事情變得複雜而且可能會變慢。

根據你想要做什麼,使用Quartz可能是一個好主意。這不是因爲性能 - 只是因爲它可能會讓你的實現更容易。如果你的應用程序在功能上很簡單,只要使用ThreadPoolExecutor就可以了(並且和JVM上的一樣)。

除非您在分析文件時進行了非常繁重的數字處理,否則CPU不會成爲您的應用程序的瓶頸。我的(瘋狂的)賭注就是數據庫訪問。因此,除非您測試應用程序,否則我不擔心CPU效率(或應用程序的JVM運行情況)。並確定這是一個瓶頸。

UPDATE
噢好的。在這種情況下,我的建議是使用EJB定時器進行定期檢查,EJB定時器使用Message Driven Bean或EJB 3.1中添加的新輕量級異步服務向JMS提交消息/作業。只要你這樣做(而不是自己產生一堆​​線程等)。),我真的不會擔心線程調度問題,因爲JBoss會負責正確的線程設計(主要有多少線程產生以及如何在任務之間共享等)。除非你測試並發現它沒有足夠的性能,否則你可能首先試着讓Timer做所有的工作(而不是使用花哨的JMS和MDB /異步服務的東西)。這樣比較簡單,而且通常具有足夠的性能。

幾乎所有的線程調度問題都來自不好的併發設計(即程序員的錯誤)。除非你正在調整CPU密集型並行計算或類似的東西,否則我真的不用擔心JVM的調度機制。這就好像擔心,如果你將要用實驗設備從那裏做一次蹦極跳,那麼這座橋是否會保持住......(你想先擔心設備)

+0

Thx。 +1。我更新了更多信息的問題。但謝謝你的見解。 – 2012-01-02 15:59:32

+0

@AlainPannetier:編輯我的答案。 HTH – 2012-01-02 18:03:22