У меня есть следующий код:
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, но это не имело значения.