我在JVM进程方面遇到了问题,我试图创建一个程序,该程序需要调用不同的语言程序,每次都要改变参数,很多次
例如,假设我需要在10秒内通过主程序(KotlinJvm)调用node.js程序1000次
现在,我正在使用ProcessBuilder类来创建一个新的进程,这样我就可以将信息返回到主进程,但速度还不够快。甚至很慢:/
我做了一些研究,了解了python子流程库,并尝试在那里实现同样的想法。在python 3.9中,我的实现非常有效!而且很快
1。所以我想问,python子进程和Jvm进程之间的区别是什么
2。有没有办法创建类似python的Jvm子进程
正如我所读到的,也可以在Jvm中创建子进程,方法是从同一个ProcessBuilder调用.start()
,但速度仍然很慢
只是为了确保,如果只打一次电话,这不会是一个问题。 问题是我需要在10-20秒内调用此文件1000次
在这里添加一些代码作为示例
Kotlin示例-我测试了一点,waitFor()
函数需要很长时间,这就是我的问题
Python示例
谢谢你的帮助:)
编辑: 如果这是相同的,是否有任何方法可以优化Jvm进程的执行?环境有变化吗
PythonPopen函数相当于Java
ProcessBuilder.start()
方法在上面的示例中,比较Jvm完成子流程所需的时间与Python启动子流程所需的时间
要比较相同的东西,您应该比较:
Jvm
到
Python
编辑
我已经在我的笔记本电脑上运行了这个简单的测试,我并没有看到Kotlin和Python在性能上的显著差异。我将把它放在这里作为测试的基础,即使度量没有“正确地”完成(通过JMH for Kotlin),它给出了一个想法:
科特林
因此,对于Kotlin,我制作了以下.kts脚本:
在jre 10上加载到Kotlin REPL 1.4.21后,我得到以下输出:
Python
在Python 3.7.9上,以下脚本:
产出:
因此,我目前的想法是,一旦执行上下文就绪,两种方法之间的性能应该不会有太大的差距。因此,如果您注意到很大的差异,那么问题可能是由于子流程之外的一些代码或初始化引起的
在这一点上,需要更多的细节(一个最小的可重复的例子将是最好的)来找到一个正确的答案
相关问题 更多 >
编程相关推荐