Почему больше потоков, чем логических ядер, приводит к повышению производительности при выполнении задач, связанных с ЦПJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему больше потоков, чем логических ядер, приводит к повышению производительности при выполнении задач, связанных с ЦП

Сообщение Anonymous »

Меня это немного озадачило, поскольку я ожидал (это просто показывает, насколько удивительной может быть производительность!), что результаты при 20 потоках и 100 потоках будут очень похожими, а 20, во всяком случае, будут незначительно отличаться. быстрее (за счет меньшего переключения контекста).

Код: Выделить всё

import java.util.concurrent.{Callable, Executors}
import scala.jdk.CollectionConverters._

object Test extends App {

private val threadPool = Executors.newFixedThreadPool(20) // Change thread number here

private def work(workId: Int): Callable[Unit] = () => {
var counter = 0L
while (counter < 10_000_000_000L) {
counter += 1
if (counter % (1_000 + counter) == 0) {
counter += workId
}
}
}

private val tasks = (1 to 100).map(work)

private val start = System.nanoTime()
threadPool.invokeAll(tasks.asJava)
private val end = System.nanoTime()

println(s"Time taken: ${(end - start)/1_000_000} ms")

threadPool.shutdown()

}
Выполнение этого 3 раза с 20 потоками в пуле: 202, 204, 205 секунд
Выполнение этого 3 раза с 100 потоками в пуле: 194, 192, 193 секунды
Я действительно повторял это несколько раз, и разница в процентах стабильна.
У меня 14 ядер и 20 логические процессоры: i7-12000H
JDK 17, Hotspot. Windows 10 Enterprise.
Есть идеи, почему это может быть, или предложения относительно того, на что я могу обратить внимание, чтобы понять это? Мне очень хотелось бы узнать больше о таких вещах!

Подробнее здесь: https://stackoverflow.com/questions/783 ... is-cpu-bou
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»