Код: Выделить всё
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 раза с 100 потоками в пуле: 194, 192, 193 секунды
Я действительно повторял это несколько раз, и разница в процентах стабильна.
У меня 14 ядер и 20 логические процессоры: i7-12000H
JDK 17, Hotspot. Windows 10 Enterprise.
Есть идеи, почему это может быть, или предложения относительно того, на что я могу обратить внимание, чтобы понять это? Мне очень хотелось бы узнать больше о таких вещах!
Подробнее здесь: https://stackoverflow.com/questions/783 ... is-cpu-bou