2010-04-07 32 views
0

java进程启动5个线程,每个线程需要5分钟。过程所需的最短时间和最长时间是多少?如果可以在java线程和OS线程中解释,将会非常有帮助。完成多线程程序所需的时间?

编辑:我想知道java如何在OS级别调度线程。

+0

这个问题与Java无关,与线程很少有关。这是数学。而且你必须知道机器一次可以运行多少个线程。 – 2010-04-07 16:26:44

+0

要求某人理解线程是一个很好的问题;然而,除非你已经理解了它,否则这不是你会问的那种问题。这是一个功课问题吗? – 2010-04-07 16:30:18

回答

4

这取决于您拥有的逻辑处理器核心数量以及已经运行的进程和线程的优先级。如果您至少有五个逻辑处理器内核,那么理论上的最小值将是5分钟加上启动和控制线程中的小开销。如果您只有一个可用的逻辑处理器核心,理论上的最大值将是25分钟加上小的开销。所提到的开销通常不会超过几毫秒。

但是,如果同时有很多其他进程正在运行的线程比JVM其他进程具有更高的优先级,则理论上的最大值可能会高得多(高得多)。

编辑:我想知道java如何在OS级别调度线程。

JVM只是衍生另一个本地线程,它被分配到与JVM本身相关的进程。

+0

在单处理器内核上这不是理论上25分钟的最小值(不是最大值)吗? – 2010-04-07 19:49:13

+0

@凯文:从另一个角度来看,是的:) – BalusC 2010-04-07 20:28:48

1

假设线程完全同时运行且没有相互依赖性并且具有可用的专用内核,最短时间为5分钟。最大时间为25分钟,假定每个线程必须独占使用某个全局资源,因此不能与任何其他线程并行运行。

0

最大的一个glib(但是现实的答案)是它们可能需要无限的时间来完成,因为多线程程序通常包含死锁错误。

0

这要看!没有足够的信息来量化这一点。

缺少信息:硬件 - 可以在CPU上同时运行多少个线程。工作量 - 是否需要5分钟,因为它需要5分钟的时间才能完成,或者需要5分钟左右的时间进行一些计算,并且使用大量的CPU资源。

当您同时运行多个线程时,可能会出现锁等待资源的情况,或者线程甚至可能需要轮流执行,尽管它们已经运行了5分钟,但它们可能只有几秒CPU。

5个线程永远不会输出5X个输出。它可以靠近,但永远不会达到5倍。

0

我不确定您是否在寻找线程所花费的CPU时间。如果是这样的话,你可以衡量的CPU时间,见下文

ThreadMXBean tb = ManagementFactory.getThreadMXBean() 
long startTime= tb.getCurrentThreadCpuTime(); 

通话结束时间之间的上述创建线程时

long endTime= tb.getCurrentThreadCpuTime(); 

的区别 - STARTIME,是CPU时间的线程使用