Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

397
Vistas
Corrutinas ForkJoinPool y Kotlin

Según tengo entendido, de forma predeterminada, si inicia un Kotlin Coroutine a través del launch o async , se iniciará en CommonPool (o si usa GlobalScope ). Y CommonPool es un ForkJoinPool que, de forma predeterminada, está en modo no asíncrono, por lo que ejecuta tareas en orden LIFO. Parece una muy mala elección para algo así como las aplicaciones de servidor web asincrónico en las que queremos una programación justa: no queremos que el pobre tonto que golpeó nuestro servidor web primero espere todas las llamadas que llegaron después.

Sin embargo, las corrutinas de Kotlin agregan una arruga adicional aquí, ya que hay un poco de código de la biblioteca estándar de Kotlin que se encargará de ejecutar esas corrutinas (alguna variación del ciclo asyc select/epoll estándar según lo entiendo). Entonces, ¿quizás lo de LIFO no es una preocupación?

Ciertamente podría ejecutar algunos experimentos y/o ingresar al código en un depurador para ver cómo funciona, pero sospecho que otros tienen la misma pregunta y apuesto a que alguien "simplemente sabe" la respuesta...

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Según la discusión en Kotlin, Discuss CommonPool ya no es el predeterminado y ahora tienen un programador "principalmente justo". Detalles en la discusión vinculada.

over 4 years ago · Santiago Trujillo Denunciar

0

Esto no debería ser una preocupación, porque ForkJoinPool no es realmente LIFO.

Es decir, es LIFO para un solo subproceso en el grupo, pero ahí es donde las cosas se vuelven interesantes con la "parte de robo de trabajo". La cola de tareas para cada subproceso tiene doble enlace. Entonces, lo que es LIFO para un subproceso es FIFO para otro subproceso que quedó libre.

En general, ForkJoinPool es una excelente solución para tareas pequeñas y, por lo general, sus corrutinas se consideran pequeñas si usa las funciones de suspensión de manera inteligente.

Además, puede leer más sobre asyncMode en la documentación, ya que no es tan "async": https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinPool.html

asyncMode: si es verdadero, establece el modo de programación local primero en entrar, primero en salir para tareas bifurcadas que nunca se unen. Este modo puede ser más apropiado que el modo basado en pila local predeterminado en aplicaciones en las que los subprocesos de trabajo solo procesan tareas asincrónicas de estilo de evento. Para el valor predeterminado, use falso.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda