Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

396
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda