2011-04-29 53 views
2

我在Java中有一个Process,tat需要4分钟才能完成。 10个这样的过程排队大约需要40分钟。如果我将一个进程的线程作为一个线程进行线程处理,那么所有10个进程都将并行运行,大约需要20分钟才能完成。是不是假设需要4分钟才能完成,因为所有的过程都是并行运行的?JAVA中的多处理器

回答

6

如果所有这些线程都在单个处理器上运行,则操作系统必须进行时间片切换和上下文切换。这种开销会增加时间。

除非您有多个处理器来分割工作,否则没有并行性。线程无法减少单个处理器上的工作。

+0

刚开始输入相同。 – Anatolij 2011-04-29 11:48:15

+0

除了大部分时间被阻塞的I/O繁重任务外。 – 2011-04-29 11:49:43

+0

如果程序交替限制CPU和IO,线程可以帮助单个核心系统。 – 2011-04-29 11:50:49

1

同时运行的实际线程数通常取决于您的CPU具有的内核数。我想你有一个双核CPU,因此是时代。

1

如果CPU上有10个内核,则10个进程只能运行并行。但他们确实同时运行。

0

只有当你有10个处理器,10个IO系统等

多个线程需要共享资源

2

是不是它想采取4分钟到 完整的,因为所有的过程都是 并行运行?????

只有当您实际上有10个内核并且程序完全受CPU限制时。您的机器只有2个内核,或者程序部分是IO或内存限制的。所有这些都很常见。

+0

我的过程共享一个共同的对象.. Tat会影响性能多远 – SriHarish 2011-04-29 12:28:58

+0

@SriHarish:那只会是如果在该对象上存在严重争用的同步,则是相关的 – 2011-04-29 12:57:42

0

这取决于你的流程在做什么。如果例如一个进程执行大量IO操作,而其他进程执行大量计算操作,但他们确实只会一起执行这4个操作。

如果两个进程都采用相同的资源,则需要更长的时间,因为必须等待资源可用。

多久螺纹加工需要不能是说,如果你不告诉我们过程做什么,它在运行,还有什么正在运行,等等,等等等等

0

这就像divididing了将工作合同分为5份合同 - 电器,木工,油漆,景观和地板。如果你雇用5个人,它将花费你1/5的时间,但如果你只有一个,它需要花费相同的时间。

0

另一个想法是,多线程只会改善解决问题的时间,如果问题是可并行化的并且没有共享资源可能会阻碍进程。我发现如果某些应该可并行化的东西在并行化时表现出差的性能,那是因为访问共享资源。

0

如果只有生命如此简单。首先,假设你只有一个没有超线程技术的CPU,所以在你的机器上,任何时候只有一个线程在运行。现在考虑可能的任务配置文件中的两个极端:

  1. CPU绑定 - 您的任务确实需要四分钟才能完成。

  2. IO-bound(或者网络,如果你喜欢的话) - 每个任务都转到同步Web服务,需要4分钟才能提供结果。

在情况1中,添加线程无济于事。你的单核仍然需要相同的时间才能完成所有的数学任务。你绝对必须拥有更多的CPU才能使其更快。

在情况2中,假设网站响应时间不会在负载下降低,您可能更合理地预计总时间为4分钟。每个线程启动它的请求,然后它处于等待状态,直到Web响应到达,允许其他线程启动它们自己的请求。

实际上,您的任务可能会有一些I/O和CPU延迟混合在一起,产生您实际看到的“中间1到2”总执行时间。

您也一定不要忘记管理机器上其他进程的开销(即使系统进程必须被管理)和进程的操作系统管理 - 对于您包含在每个新线程中的每个新线程处理。