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

80
Vistas
Swift operación concurrente más lenta 2x veces

Tengo una gran matriz JSON que necesito guardar en Realm, el problema es que esta operación dura alrededor de 45 segundos y eso es demasiado. Intenté ejecutar la operación de guardar simultáneamente para cada elemento en la matriz JSON de esta manera:

 for element in jsonArray { // jsonArray has about 25 elements DispatchQueue.global(qos: .userInitiated).async { let realm = try! Realm() let savedObject = realm.objects(MyObject.self).filter("name == '\(element.name)'") for subElement in element { // element is an array that has around 1000 elements let myModel = MyModel(initWith: subElement) // MyModel initialization is a simple light weight process that copies values from one model to another savedObject.models.append(myModel) } } }

Cuando trato de ejecutar el mismo código pero con DispatchQueue.main.async , terminó alrededor de 2 veces más rápido, aunque no es concurrente. También intenté ejecutar el código anterior con calidad de servicio .userInteractive pero tiene la misma velocidad.

Cuando ejecuto este código, la utilización de la CPU es de aproximadamente el 30% y la memoria de aproximadamente 45 MB. ¿Es posible acelerar esta operación o llegué a un callejón sin salida?

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

0

  1. El ciclo completo debe estar dentro del DispatchQueue.global(qos: .userInitiated).async .
  2. Como se documenta en el sitio web de Realm :

    Las operaciones de escritura de dominio son síncronas y de bloqueo, no asíncronas. Si el subproceso A inicia una operación de escritura, entonces el subproceso B inicia una operación de escritura en el mismo Reino antes de que finalice el subproceso A, el subproceso A debe finalizar y confirmar su transacción antes de que tenga lugar la operación de escritura del subproceso B. Las operaciones de escritura siempre se actualizan automáticamente en beginWrite(), por lo que las escrituras superpuestas no crean ninguna condición de carrera.

    Esto significa que no obtendrá ningún beneficio al intentar escribir en varios hilos.

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