java - 响应时间随着 Java 中并发性的增加而增加

标签 java multithreading recursion concurrency

我写了一个独立的 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/

相关文章:

python - 计算递归调用 - 汉诺塔

java - 转换以数字作为 header 的 Json 对象

Java utc 毫秒

c# - C# sqlite 中的多线程

c# - 我是否应该注意到在 .Net 4.0 中使用任务与线程的区别?

multithreading - MonoTouch-AppDomain.CurrentDomain.UnhandledException挂起

java - 这种递归回溯解决方案如何解决算术表达式?

java - 如何在java中获取语言环境对象?

c - 递归函数中的 fork/pipe/close

java - 在java中递归交换字符串中的字母对