Mi aplicación descarga varios recursos del servidor, datos y descriptores de datos. Estas descargas, desencadenadas por acciones de los usuarios, pueden realizarse simultáneamente, digamos, hasta 50 descargas a la vez. Todas estas tareas asíncronas terminan creando objetos en la memoria (por ejemplo, agregando hojas a estructuras de datos, como agregar claves a diccionarios u objetos mutables en las matrices). Mi pregunta es: ¿esto puede causar problemas de estabilidad? Por ejemplo, si varias tareas simultáneas intentan agregar claves al mismo diccionario, ¿se supone que debo manejar la situación, colocando algún tipo de bloqueos? Si implemento un ciclo for que busca elementos gráficos en una matriz, ¿es posible que otras tareas en ejecución puedan cambiar el contenido de la matriz 'durante' el ciclo? ¿Alguna referencia o principal orientación general sobre este multitarea, problemas de subprocesos múltiples además de la documentación oficial?iOS - Acceso concurrente a los recursos de memoria
Respuesta
depende de cómo se está tratando con las descargas - si está utilizando NSURLConnection que se encarga de la rosca separada/concurrencia para usted y su código es reentrante por lo tanto usted no tiene que preocuparse por la acción simultánea. Si está creando sus propios hilos, posiblemente tenga problemas.
EDIT: Su código se ejecuta en un hilo principal (el ciclo de ejecución principal), supongamos que tiene una NSURLConnection que también se está ejecutando y luego se ejecutará en un hilo separado. Sin embargo, su código de delegado que se ocupa de los eventos que suceden mientras la conexión está en progreso se ejecuta en su bucle de ejecución, no en el otro. Esto significa que su código solo puede ejecutar una cosa a la vez. Un método de conexión exitosa no se llamará al mismo tiempo como cualquiera de sus otros códigos. Si tuviera un bucle for funcionando, bloquearía el hilo principal hasta que finalizara el bucle, mientras tanto, si la conexión finaliza mientras el bucle for aún se está ejecutando, su código de delegado no se ejecutará hasta después de que el bucle haya finalizado.
Es posible que desee examinar Grand Central Dispatch (GCD) y bloques de barrera. Los bloques de barrera te permitirán hacer lo que desees en segundo plano y "bloquear" los recursos.
Consulte la documentación de Apple y la publicación de Mike Ash en el blog here en GCD.
La esencia básica es que utiliza una cola concurrente que crea para realizar las lecturas y utiliza un bloque de barrera para bloquear todo el acceso a ese recurso para la escritura. buen material.
Buena suerte
Tim
- 1. Rhino y acceso concurrente a javax.script.ScriptEngine
- 2. acceso variable concurrente en c
- 3. acceso a memoria vs. copia de memoria
- 4. ¿Acceso estático a los recursos de una aplicación de Android?
- 5. Acceso a recursos sin contexto
- 6. Caché de memoria o diccionario concurrente?
- 7. Conseguir acceso a los recursos de un ArrayAdapter en Android
- 8. Acceso concurrente a una cola por múltiples hilos
- 9. Cola concurrente con GCD? (IOS 4.2.1)
- 10. Recursos de Android: ¿Cómo se manejan los mapas de bits de los recursos manejados en memoria?
- 11. Acceso a recursos enteros en xml
- 12. código C - acceso a la memoria/apropiación
- 13. Acceso a recursos en un proyecto de prueba de Android
- 14. Acceso directo a memoria en Linux
- 15. recursos de pruebas de instrumentación Acceso
- 16. Acceso atómico a la memoria compartida
- 17. Llamada concurrente a la conversación
- 18. ¿Tiene acceso a recursos en otro paquete de osgi?
- 19. Acceso a los colores en un diccionario de recursos de un convertidor de valor
- 20. Acceso concurrente a la base de datos: evitando que dos usuarios obtengan el mismo valor
- 21. iOS gestión de memoria básica
- 22. WPF: acceso a los recursos en tiempo de diseño cuando App.xaml's Build Action = Página
- 23. ¿Cómo acceder a los recursos de prueba?
- 24. Acceder a los recursos de JAR
- 25. iOS acceso a la red de aplicaciones en segundo plano
- 26. Acceso a recursos multiproceso: ¿dónde pongo mis bloqueos?
- 27. Permisos de acceso a memoria compartida en Windows
- 28. Concurrente estructura de datos genéricos sin interbloqueos o falta de recursos
- 29. Detectando el acceso a la memoria a un proceso
- 30. Administración de memoria/recursos usando MonoTouch y MonoTouch.Dialog
Sí, estoy usando NSURLConnection. Imaginemos que tenemos un for-cycle en una matriz mutable, ¿qué ocurre si otra tarea (conexión exitosa) intenta agregar un objeto al final de la matriz, mientras se ejecuta el ciclo for? ¿Podría hacer un breve ejemplo de código de reentrada en este caso? – user236739
Se agregaron unas cuantas oraciones más – Gruntcakes
Genial, estas nuevas líneas realmente aclararon, gracias. – user236739