2015-04-13 81 views
0

这是一个理念问题:提高速度spplication - Java的

我不知道在哪里把我的问题,对不起,(如果我的questios是题外话),请告诉我,我需要问这个题。我使用单线程应用程序,我使用一次和只有部分内存,但使用多线程(转换我的单一应用程序到多线程)我可以提高速度(操作系统给我的应用程序更多的时间,如果我有n个线程)?

这个速度是在线程数的功能,

Supose我的OS正在与50个线程(多任务或服务),我的应用程序只能获得(1/50)CPU的一部分,但如果我的应用程序有10个线程,那么我的速度是CPU的(10/60)部分...假设所有线程具有相同的优先级...

显然,这种“改善”不是线性的,这意味着速度会小于(10/60)。

你的概念是什么?

+3

它完全取决于你的代码是否可以通过使用多线程来加速 - 你知道[Amdahl's Law](http://en.wikipedia.org/wiki/Amdahl%27s_law)吗? –

+0

听起来好像你正试图通过创建新线程来“窃取”来自其他进程的CPU时间。 (1)无论如何,大多数情况下,您可能无法以100%CPU运行,(2)操作系统通常会考虑到这种贪婪行为,并降低整个过程的优先级。 – chrylis

回答

0

有更多的线程不会给你更多的CPU。单线程应用程序仍然可以达到100%单核利用率。优先级与你允许获得多少线程数有关。

线程是关于将独立计算与独立计算分离,以便可以在同一时间进行多于一个计算以允许并行计算。

线程也很有用,因为它们允许计算继续进行,而其他计算正在等待像文件I/O这样的较慢进程。

如果您的应用程序可以利用这些优势,那么它在多线程下可能执行得更快。但是一个好的测试值得一千个专家的意见。

请记住,确保多线程应用程序正确不是一件容易的事。