Почему опция Scala ожидает AbstractQueuedSynchronizer $ ConditionObject - PullRequest
1 голос
/ 04 июня 2019

Я делаю функцию 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?

1 Ответ

0 голосов
/ 04 июня 2019

public abstract class java.util.concurrent.locks.AbstractQueuedSynchronizer extends java.util.concurrent.locks.AbstractOwnableSynchronizer implements java.io.Serializable

это происходит из параллельной библиотеки Java и включается при параллельном коде во время выполнения.

...