我写了一个独立的 java 程序,它涉及一个至少被调用 6 万次的递归函数。现在,当我将此 java 程序作为单线程运行时,大约需要 2 秒。但是,当我生成 25 个并行线程时,响应时间增加到 10 秒,其中每个线程同时启动并在 10 - 15 秒后大约同时结束。
我运行了分析器工具 (jvisualvm) 来检查正在使用的任何线程上是否有任何锁,但所有 25 个线程始终显示在运行状态。
因此我的问题是: 1. 并发响应时间可能会增加(取决于系统的内核),但是如果假设运行测试的机器是 6 核机器,那么至少 6 个线程应该至少在 2 秒或更短时间内完成?并非所有人都应该同时完成处理,即。 10秒后? 2. 如何检测导致并行处理出现问题的原因?
感谢对此的回应。
谢谢。
最佳答案
In concurrency response time may increase (depends on cores on the system) , however if suppose the machine on which test runs is a 6 core machine then at least 6 threads should finish in at least 2 seconds or little more?
理论上,这是可能的,但这完全取决于你在做什么。如果您受 CPU 限制并且遇到自然并行化的问题,则可以使用 6 个代码获得 6 倍的改进。如果你有一个网络 IO 绑定(bind)进程,那么 100 个线程可以只用 6 个内核快 100 倍。但是,如果您的任务开销太高,则使用多线程比只使用一个线程的速度要慢几个数量级。
Not all should complete processing at the same time ie. after 10 seconds?
这不太可能,但有可能。
How do i detect what is it that is causing problem in parallel processing?
当你使用多线程时,它比一个线程慢。我建议你看看你是如何分解问题的,并确保你没有比有用的工作更多的开销。
关于java - 响应时间随着 Java 中并发性的增加而增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31059089/