【发布时间】:2016-04-13 07:14:19
【问题描述】:
我想知道是否有人可以告诉我,当线程数多于内核数时,java 如何处理多线程?例如,我有一个四核,但我的程序使用了 8 个线程。
我只是问,因为我想做一些并行编程。我想用它来提高数组的性能。
感谢您的帮助。
编辑: 澄清一下,我将使用并行编程来按内核数划分数组。所以我有一个50K左右的数组,希望能用PP来提高性能,增加数组大小。
【问题讨论】:
-
我有一个创建 1000 个线程的性能测试脚本。一个CPU可以运行多个线程,但据我了解,一次只能有一个线程占用一个CPU(但2个线程可以同时在2个CPU上运行)。操作系统处理资源的分配(CPU 使用率、RAM 等)。不过,这与语言无关。
-
但是,即使有 1 个 CPU,多线程通常仍然更快。
-
@btquanto 除非您的 CPU 有 1000 个内核(或具有超线程的 500 个内核),否则启动 1000 个线程不会让您的程序运行得更快。这些线程中的大多数将等待它们被调度。仅仅添加更多线程并不会自动使程序运行得更快。
-
@Jesper 因为线程是由操作系统调度的,所以它不仅仅运行你程序的线程。假设操作系统有 9000 个线程在运行,而你的程序只是增加了 1000 个线程,如果我假设每个线程具有相同的优先级,是不是意味着你的程序总共占用了 10% 的资源?
-
@btquanto 不,这取决于线程在做什么。如果这 9000 个操作系统线程正在等待 I/O,那么您的应用程序线程可能会在那个时间点使用 99% 的 CPU。
标签: java multithreading parallel-processing