Я делаю функцию Scala более параллельной, чтобы ее можно было вызывать из нескольких потоков и действительно выполнять параллельно. Я использую профилировщик и вижу, что моя функция compute
ждет 388 мсек для AbstractQueuedSynchronizer$ConditionObject
.
Согласно профайлеру ожидание происходит в scala.Option.filter
.
Я пытался посмотреть на байт-код javap
, но я не вижу AbstractQueuedSynchronizer
.
Я запускаю свой код с ExecutorService
:
{ (1 to 24) ++ (24 to 1 by -1) }.foreach { threads =>
val executorService = Executors.newFixedThreadPool(threads)
compute(executorService, s"Threads $threads")
executorService.shutdown()
executorService.awaitTermination(10, TimeUnit.SECONDS)
}
Я ожидаю не ждать и не AbstractQueuedSynchronizer
. Откуда взялся AbstractQueuedSynchronizer
?