Как отключить akka.dispatch.BatchingExecutor? - PullRequest
0 голосов
/ 20 октября 2018

У меня сравнительно небольшая распараллеливание (менее десятка потоков), где я хочу при всех условиях одновременно парковать все потоки (некоторые из них могут возобновиться в процессе работы приложения, некоторые - нет).

Поскольку все верхние вызовы выполняются из диспетчеризации akka, которая опирается на BatchingExecutor, вызовы не обязательно группируются, и код никогда не достигает точки, где все потоки припаркованы в нужном месте!

at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60)
at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55)
at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:91)
at akka.dispatch.BatchingExecutor$BlockableBatch$$Lambda$784/1938142664.apply$mcV$sp(Unknown Source)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:81)
at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:91)

Как я могу отключитьэто поведение?* У меня нет контроля над упакованным runanble (например, не может расширяться от Batchable) * У меня нет контекста выполнения управления, поэтому я не могу использовать blocking {} construct

Мне просто нужна опция конфигурации, чтобы отключитьпорция / установить размер партии на 1.

1 Ответ

0 голосов
/ 02 ноября 2018

Вы не должны блокировать диспетчер Akka, поэтому «парковать все потоки» не представляется возможным.Я бы предложил задать этот вопрос по-другому, описав больше вашего предполагаемого варианта использования и ограничений: возможно, есть другой подход, который бы подходил лучше.

...