Scala выполняет фьючерсы на сервере иначе, чем на компьютере разработчика - PullRequest
4 голосов
/ 16 мая 2019

У меня есть следующий код:

private implicit val ec = ExecutionContext.fromExecutor(Executors.newFixedThreadPool(2) )

private val done = new AtomicInteger(0)

Future(/* long running task*/).onComplete(_ => done.done.incrementAndGet())

Future(/* second long running task*/).onComplete(_ => done.done.incrementAndGet())


while (done.get() < 2) {
    Thread.sleep(5000)
}

(Да, это уродливо и хакерски и не проверяет ошибки и т. Д.)

Когда я запускаю это локально, журналы указывают, что он запускал оба фьючерса параллельно, т.е. я вижу журналы обоих фьючерсов одновременно. Но когда я перемещаю это на сервер (с меньшим количеством ядер ЦП и памяти), я вижу только журналы из одного будущего, указывающие, что он запускал только одно из них и, вероятно, ожидал, что это будущее завершится, прежде чем запустить второе (или как-то зашёл в тупик).

Есть идеи, почему это так? Я даже увеличил fixedThreadCount до 4, но это не имело значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...