如果我想在多用户环境(通过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