如果我想在多用戶環境(通過Tomcat-servlet)中運行一個進程(完成此過程需要花費幾個小時),哪個更好地實現此過程? 1)在線程或2)在JMS 有什麼優點和缺點?線程或JMS哪個更好?
2
A
回答
3
不確定您使用JMS時的設想,完成的方式是讓客戶端在隊列上彈出請求,並且有一些(可配置的)工作線程將請求關閉並對其進行維護。在我的情況下,我將有一個MDB作爲讓這些工作線程運行的機制 - 但這只是一個實現細節。
所以我沒有看到線程和JMS的替代品,更多的JMS給你一個可控的方式來使用線程。您幾乎肯定需要避免允許一次處理太多請求,因此您在概念上需要隊列,可能還需要使用JMS來實現。
要弄清楚各種細節,比如如何溝通結果,確保瀏覽器不會在幾個小時內閒逛。某種Ajax輪詢,或者Comet push可能?
另外還有一個想法 - 處理幾個小時的單一塊?這可能會受益於被分解成若干步驟(再次由JMS隊列中介)。這樣一來,撞車事件並沒有讓所有的事情都回到原點。
0
如果我理解了您的選項,請執行第二個選項,即: 讓Tomcat上的servlet向JMS客戶端(最好是JMS容器中的MDB)發送消息。在那裏,開啓漫長的過程。 這樣做,而不是在servlet中創建一個新的線程(選項1),這是真的不建議做事情的方式。
0
我認爲關鍵因素是:您希望看到的最大併發請求數量是多少,以及您處理溢出的策略是什麼?
如果你一次只有少數的請求,線程就沒問題。維護CountdownLatch的簡單後臺線程可用於處理任何溢出。
如果您預計會有很多請求,那麼JMS可能更適合您的任務。
相關問題
- 1. 哪個更好?線程或進程
- 2. min或gzip,哪個更好?
- 3. 哪個更好? OpenCyc或ConceptNet?
- 4. 哪個更好,Nagios或Sensu?
- 5. jqGrid或dataTable,哪個更好?
- 6. PHP:ParseCSV或PHPExcel哪個更好?
- 7. DataTable或IList?哪個更好?
- 8. 哪個更好? city.state.id或city.state_id
- 9. PigServer或PigRunner?哪個更好?
- 10. 哪個更好H2或HSQLDB?
- 11. 哪個更好:PooledConnectionFactory或CachingConnectionFactory?
- 12. 哪個更好Paperclip或CarrierWave?
- 13. 哪個更好Math.random()或UIDUtil.createUID()
- 14. 哪個更好BOOST_MPL_ASSERT或BOOST_STATIC_ASSERT?
- 15. Magento或Prestashop,哪個更好?
- 16. Gzip或ob_flush()?哪個更好?
- 17. Japid或Scala哪個更好?
- 18. 哪個更好c89或c99
- 19. Coredata或Sqlite哪個更好
- 20. 哪個更好... GATE或RapidMiner
- 21. 哪個更好 - PyInstaller或cx_Freeze?
- 22. 哪個更好:Parcelable或Context?
- 23. RTC或AccuRev哪個更好?
- 24. Vector.contains()或Hashtable.get()哪個更好
- 25. Android:ViewFlipper或ViewPager - 哪個更好?
- 26. 哪個更好,setEnabled或setUserInteractionEnabled?
- 27. 哪個更快perl,Parallel :: ForkManager或線程?
- 28. 哪個更好或者Viewgroup或者Layout
- 29. SocketChannel:單個或多個,哪個更好?
- 30. 哪種語言具有更好的線程功能? PHP或Ruby