当前位置: 首页 > 面试题库 >

EJB如何并行化耗时长的CPU进程?

龙新荣
2023-03-14
问题内容

该应用程序具有占用大量CPU资源的长进程,当前该进程在客户端请求时在一台服务器(EJB方法)上串行运行。

从理论上讲,理论上可以将流程分为N个块并并行执行,只要可以收集所有并行作业的输出并将其合并在一起,然后再将其发送回启动该流程的客户端即可。我想使用这种并行化来优化性能。

如何使用EJB实现这种并行化?我知道我们不应该在EJB方法中创建线程。相反,我们应该发布消息(每个作业一个),以供消息驱动bean(MDB)使用。但这将不再是同步调用。在这种情况下,同步是一项要求,因为我需要先收集所有作业的输出,然后再将其发送回客户端。

有解决方案吗?


问题答案:

这个特殊问题已经多次出现,我将总结出有几种可能的解决方案,我只建议其中一种。

使用commonj API中的WorkManager。它允许在Java
EE容器中使用托管线程,并且经过专门设计以适合您的用例。如果您使用的是WebSphere或WebLogic,则服务器中已经提供了这些API。对于其他人,您将必须自己提供第三方解决方案。

WorkManager信息

相关问题 为什么不鼓励生成线程



 类似资料:
  • 问题陈述 我已将分区的 CSV 文件读入 Spark 数据帧。 为了利用Delta表的改进,我尝试将其作为Delta导出到Azure Data Lake Storage Gen2内的一个目录中。我在Databricks笔记本中使用以下代码: 整个数据帧大约有160 GB。 硬件规格 我正在使用具有12个内核和42 GB RAM的集群运行此代码。 然而,看起来整个写作过程都由Spark/Databa

  • 问题内容: 这不是Beta版问题。我使用的是Xcode 6.0.1,正式版。我遇到的问题是,当我尝试构建或运行我正在处理的代码时,Xcode长时间不响应,并且SourceKitService消耗了超过400%的CPU(根据Activity Monitor)。尽管奇怪的是,自9月17日正式发布以来,我一直在使用Xcode 6.0,但是最近才升级到6.0.1,希望它包含针对此问题的修复程序。 关于可能

  • 问题内容: 我想让我的用户了解I / O操作的进度。目前,我有一个内部类,在开始I / O之前要开始学习,在完成后停止。看起来像这样: 是我对UI的引用,是我的外部类中的一个字段,表示我们在I / O中取得的进步。我将停止时的进度设置为100%,因为有时I / O完成并停止我的更新程序,然后它才能完成更新以前的增量。那只是确保它是100%。 目前,这可行,我像这样使用它: 问题在于循环严重地吞噬了

  • 我正试图找到一种很好的并行化代码的方法,对大数据集进行处理,然后将结果数据导入RavenDb。 数据处理是CPU绑定和数据库导入IO绑定。 我正在寻找一种在环境上并行处理的解决方案。ProcessorCount线程数。然后应将生成的数据导入到与上述进程并行的x(假设10)池化线程上的RavenDb中。 这里的主要问题是我希望在导入完成的数据时继续处理,以便在等待导入完成时继续处理下一个数据集。 另

  • 我有一个Java pc应用程序,一旦加载相应的配置数据,CPU性能就会逐步提高。 基本有2个线程,一个主线程,一个副线程。在主线程中生成一个登录和一个数据加载,而在第二个线程中每10秒生成一次查询。如果会话启动但未加载数据,则第二个线程继续查询但性能最小。CPU消耗的增加是在加载数据后产生的,并且逐渐增加。 此外,如果再次加载数据,则消耗将降至最低,一旦加载,消耗将再次增加。 由于保密问题,我不能

  • 更新:问题现已修复。 我想执行一个执行时间超过99,999秒的查询(例如)。要更改MySQL Workbench中的超时,我们必须转到编辑→首选项→SQL编辑器→DBMS连接读取超时(以秒为单位)。但是,字段最多只接受5个数字,将该字段设置为0相当于默认参数(600秒)。如果查询花费的时间超过超时,我收到错误消息: 因此,我的问题是:有没有可能将这一限制增加到99,999秒以上?我用的是Windo