ios multithreading grand-central-dispatch nsthread nsoperationqueue

ios - ¿Cuál es el mejor de GCD, NSThread o NSOperationQueue?



multithreading grand-central-dispatch (2)

Me he estado inclinando hacia NSOperationQueue últimamente. Esto utiliza GCD internamente y es seguro para subprocesos, y es muy fácil de usar.

¿Cuál es la mejor forma de multiproceso en iOS ya que tenemos tres opciones GCD, NSThread y NSOperationQueue ? ¿Estoy confundido en cuál es el mejor? Si no hay ninguno, entonces se debe usar en qué escenario y en qué se diferencian y también, si alguien tiene algún buen ejemplo de uso de NSOperationQueue , por favor, comparta para que pueda aprender.


Respuesta simple:

  1. Utilice NSThread (o incluso la API pthreads) cuando desee o necesite tener control directo sobre los subprocesos que crea, por ejemplo, necesita un control preciso sobre las prioridades de los subprocesos o está interactuando con algún otro subsistema que vende / consume objetos de subprocesos directamente y usted Necesito estar en la misma página con él. Tales casos son raros, pero ocurren, particularmente en aplicaciones en tiempo real.

  2. Use GCD cuando su tarea se adapte bien a una simple paralelización, por ejemplo, solo desea lanzar algo de trabajo "en el fondo" con muy poco trabajo adicional, tiene algunas estructuras de datos a las que simplemente desea serializar el acceso (y las colas en serie son geniales para hacerlo sin bloqueo), tiene algunos bucles que se prestan a la paralelización con dispatch_apply (), tiene algunas fuentes de datos / temporizadores que la API de fuentes de GCD le permitirá tratar fácilmente en segundo plano, etc. . GCD es bastante poderoso y puede usarlo por mucho más que esto, pero todos estos son escenarios relativos "sin complicaciones" en los que no desea quedar atrapado en las tareas de inicialización y configuración, sino simplemente "hacer lo básico". cosas en paralelo ".

  3. Use NSOperation cuando ya esté en la capa de la API Cocoa (en lugar de escribir en C directamente a las API de POSIX) y tenga operaciones más complejas que desee paralelizar. NSOperation permite la creación de subclases, gráficos de dependencia arbitrariamente complejos, cancelación y una serie de otras semánticas de nivel superior que pueden ser útiles para usted. NSOperation en realidad usa GCD debajo de las cubiertas, por lo que es tan multi-core, multi-hilo capaz de GCD, aunque también trae el marco de la Fundación para el viaje, así que si estás hackeando la capa POSIX, probablemente quieras usar opcion 2.

Sin embargo, como han dicho otros, todo depende de lo que esté tratando de hacer, por lo que no hay una respuesta única o incluso universal a su pregunta.