iphone objective-c cocoa cocoa-touch multithreading

iphone - NSOperationQueue y concurrente vs no concurrente



objective-c cocoa (2)

Quiero configurar una cola de tareas serializada usando NSOperationQueue, pero estoy un poco confundido por la terminología discutida en la documentación.

En el contexto de un objeto NSOperation, los términos concurrentes y no concurrentes no se refieren necesariamente a la ejecución de hilos lado a lado. En cambio, una operación no simultánea es aquella que se ejecuta utilizando el entorno que se le proporciona, mientras que una operación simultánea es responsable de configurar su propio entorno de ejecución.

¿Qué significa configurar "propio entorno de ejecución"?

Las tareas derivadas de mi NSOperation deben ejecutarse en serie en el orden en que se agregaron a la cola.

Así que pensé que esto implica una operación ''no concurrente'', así que implementaría ''principal'' para el trabajo que debe completarse y también devolvería NO para ''es Concurrente''. Además, el ''setMaxConcurrentOperationCount'' de NSOperationQueue se establecería en 1.

La razón por la que no estoy configurando la dependencia de NSOperation entre estas tareas es porque el orden en que se insertan en la cola es el orden en que deben completarse.

¿Son estas suposiciones correctas?


NSOperationQueue siempre ejecuta operaciones al mismo tiempo, teniendo en cuenta las dependencias.

Una operación "no concurrente" requiere un hilo separado para ejecutarse simultáneamente. NSOperationQueue es responsable de proporcionar este hilo. En otras palabras, una operación no simultánea depende de NSOperationQueue para convertirla en una operación concurrente.

Una operación "concurrente" es concurrente por sí misma; no necesita NSOperationQueue para crear un hilo para él. Un ejemplo sería una operación que utiliza un archivo I / O asíncrono.

Si desea dos o más operaciones para ejecutar en serie, necesita usar dependencias.

Si desea que una operación bloquee el hilo principal, no use NSOperationQueue ; simplemente ejecute cada operación una después de la otra en el hilo principal.

Para establecer manualmente el máximo de operaciones concurrentes, use el método en operationQueue setMaxConcurrentOperationCount:


¿Realmente necesita subclasificar NSOperation ? ¿Por qué no usar simplemente NSInvocationOperation y su método addDependency: :?

Ver mi respuesta en esta pregunta SO .