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

286
Vistas
¿Cuántas rutinas son demasiadas?

Necesito acelerar una búsqueda sobre alguna colección con millones de elementos. El predicado de búsqueda debe pasarse como argumento.

Me he estado preguntando si la solución más simple (al menos por ahora) no sería simplemente usar rutinas para la tarea.

La pregunta a la que me enfrento en este momento es cuántas corrutinas puedo crear a la vez. :D Como nota al margen, puede haber más de una búsqueda de este tipo ejecutándose al mismo tiempo.

¿Puedo hacer millones de rutinas (una para cada artículo) para cada búsqueda? ¿Debo decidir sobre alguna carga de trabajo por rutina (por ejemplo, 1000 elementos por rutina)? ¿Debería también decidir sobre algún límite para la cantidad de rutinas?

Tengo un conocimiento aproximado de las corrutinas y cómo funcionan realmente, sin embargo, no tengo idea de cuáles son las limitaciones de rendimiento de esta función.

¡Gracias!

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

0

El peso de la memoria de una corrutina se escala con la profundidad del seguimiento de la llamada desde el bloque constructor de la corrutina hasta el punto de suspensión. Cada llamada suspend fun agrega otro objeto de Continuation a una lista vinculada y esto se retiene mientras la rutina está suspendida. Una cifra aproximada para una instancia de Continuation es de 100 bytes.

Entonces, si tiene una profundidad de seguimiento de llamadas de, digamos, 5, eso equivale a 500 bytes por elemento. Un millón de artículos son 500 MB.

Sin embargo, a menos que su código de búsqueda implique operaciones de bloqueo que dejarían un subproceso inactivo, no obtendrá nada de las corrutinas. Su tarea se parece más a una instancia de paralelismo de datos y puede resolverla de manera muy eficiente utilizando la API java.util.stream (como lo señaló el usuario marstran en el comentario).

over 4 years ago · Santiago Trujillo Denunciar

0

De acuerdo con la guía de inicio de rutinas de Kotlin , el ejemplo lanza 100 000 rutinas. Creo que lo que pretendes hacer es exactamente para lo que está diseñado kotlin coroutine.

over 4 years ago · Santiago Trujillo Denunciar

0

Si no va a hacer muchas modificaciones en su colección, simplemente guárdela en un HashMap, de lo contrario, guárdela en un TreeMap. Entonces solo busque elementos allí. Creo que los métodos de búsqueda implementados allí están lo suficientemente optimizados para manejar un millón de elementos en un abrir y cerrar de ojos. No usaría coroutines en este caso.

Documentación (para Kotlin):

HashMap: https://developer.android.com/reference/kotlin/java/util/HashMap

TreeMap: https://developer.android.com/reference/kotlin/java/util/TreeMap

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