6

到目前为止,我的印象是同时启动的 2 个线程也是并行执行的(都同时运行它们的一段代码),但我最近阅读了一些文档,我了解到它们实际上是轮流执行的执行他们的代码,因此第一个线程的代码不会与第二个线程的一段代码同时执行。 我的理解正确吗?

如果是,那么多线程比一个线程执行快多少? 我问这个是因为唯一的区别是单个线程顺序执行代码,而多线程可以轮流执行,但仍然应该花费相同的时间,因为它没有并行完成

4

5 回答 5

8

a) 在多处理器机器上,线程实际上可以并行运行(每个 CPU 一个)

Thread.sleep()b) 如果您的线程在等待 IO 等时调用,它会为其他线程提供资源。所以多线程应用程序在处理外部资源时实际上比单线程应用程序更快

于 2013-10-06T10:52:32.947 回答
3

如果有足够的 CPU可用于 JVM,Java 线程将并行执行。您不能同时在具有单个计算元素的机器上运行 2 次计算,因此该计算元素在任何给定时间由第一次或第二次计算使用。您所读到的内容可能与这种情况有关。

于 2013-10-06T10:54:17.753 回答
2

不,Java 线程是并行执行的(与 CPython 等其他平台不同)。但是,这是否会提高性能取决于您执行的代码。

如果您使用易于并行化和 CPU 密集型任务进行测试,例如使用可并行化算法计算 PI 或调整大量图像的大小等,您可以轻松证明性能基本上可以线性提高(如果您有 2 个 CPU = x2、4 个 CPU = x4 等.)

编辑
当你只有一个 CPU 时,多线程仍然是有益的。例如,您可以让一个线程从磁盘读取图像,而另一个线程调整图像大小。这也将提高性能,因为您可以毫无浪费地利用 CPU。

EDIT2:当您在单个线程中读取和调整图像大小(注意复数)时,您会看到 CPU 使用率不会始终为 100%。这是因为当线程从文件中读取时,它不能执行调整大小。如果您有多个线程,则在调整大小完成时,另一个文件将在内存中准备好。如果您正在处理大图像,使用这种设计将 CPU 固定在 100% 相对容易。

于 2013-10-06T10:59:49.610 回答
1

那么您问题的答案取决于系统拥有的 CPU 数量。请记住,单个 CPU 一次只能处理一个线程,但线程之间的上下文切换非常快,以至于线程似乎在并发运行。

关于你的第二个问题如果是,那么多线程比一个线程执行快多少? 多线程利用 CPU 周期。假设一个线程在某个资源上被阻塞,其他线程可能有机会运行。


附带说明一下,如果您想查看一些基本的多线程教程http://javasolutionsonline.blogspot.in/p/java-concurrency.html ,请浏览此博客页面

于 2013-10-06T11:09:38.590 回答
-1

嗯..线程确实并行运行...但不是在具有单核的传统 pc 中..如果您有一个多核芯片或许多 CPU,那么它们可以并行运行..想象一个线程在每个线程上运行四核...

线程也给了你许多其他的好处,你一定已经知道了

于 2013-10-06T11:05:13.273 回答