首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从groovy调用java时的并行性问题

从groovy调用java时的并行性问题
EN

Stack Overflow用户
提问于 2016-08-12 19:29:30
回答 1查看 118关注 0票数 0

我有一个大型的Java框架,它使用了大量的并行执行(线程池、Java 8流等)。当我在纯Java中使用它时,它会工作,并在计算繁重的任务中最大限度地加载我的8个内核。

现在,我为我的java类创建了一个薄Groovy包装器,以简化配置。我期望的是Groovy调用会有轻微的性能开销,但编译后的Java类的性能应该是一样的。在实践中,我看到有一个巨大的性能下降,程序只利用一个或两个核心到40-50%。当我将Groovy代码包装在GroovyShell中并从Java main类中调用它时,一切工作正常,并且我恢复了100%的性能。

有什么问题吗?Groovy launcher是否覆盖了一些默认的线程池配置?

我使用的是Java 8,Groovy 2.4.7,并从Idea调用Groovy脚本。

EN

回答 1

Stack Overflow用户

发布于 2016-08-29 17:16:26

我找到问题了。它不是使用Java线程池,而是使用Groovyshell。我在java代码中有一个GroovyShell调用,所以当我从java调用它时,它工作得很好,但是当我从groovy调用它时,由于某种原因,它导致当前线程在另一个线程上等待GroovyShell调用完成(即使我有不同的外壳对象)。

我包含了同步解析的脚本缓存(脚本被解析一次,然后与不同的绑定一起使用),它解决了这个问题(也极大地提高了这部分代码的性能)。

唯一的问题是,由于没有明显的方法来克隆脚本并将其分发给不同的线程,因此我需要同步调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38916917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档