Encontré el método de scala.concurrent.blocking
, y de acuerdo con la documentación de Scala, esto es …
Se usa para designar un fragmento de código que potencialmente bloquea, permitiendo que el BlockContext actual ajuste el comportamiento del tiempo de ejecución. Marcar correctamente el código de locking puede mejorar el rendimiento o evitar interlockings.
Tengo algunas dudas:
scala.concurrent.ExecutionContext.Implicits.global
o para contextos de ejecución creados por el usuario? blocking {
… }
? join
, y hay más trabajo por completar que podría potencialmente terminar uno de los subprocesos . Alternativamente, si uno de los subprocesos de ForkJoinWorker
está ejecutando código que bloquea de otra forma que no sea usando join
, puede notificar al grupo utilizando ManagedBlocker
. ExecutionContext
que el código ejecutado por un hilo de trabajo está bloqueando potencialmente en alguna condición, y que esta condición podría resolverse mediante el cálculo de otra cosa utilizando algún otro hilo. El contexto de ejecución puede o no actuar sobre esto. En la implementación actual (2.10, 2.11), el blocking
solo funcionará con el contexto de ejecución global predeterminado. Await
, o está esperando que la condición del monitor se resuelva, y esta condición puede resolverse mediante otra tarea / futuro que debe ejecutarse en el mismo contexto de ejecución: en todos estos casos, debe usar el blocking
. EDITAR:
Considere echar un vistazo al Capítulo 4 en el Progtwig de Aprendizaje Simultáneo en Scala .
Siempre encontré la documentación oficial un poco pobre con respecto a la construcción de locking; por lo tanto, traté de explicarlo más claramente en esta publicación de blog con ejemplos de cómo podría implementar la suya y cómo funciona bajo el capó.