appena pubblicato in una risposta diversa, ma qui è qualcosa che ho scritto un bel po 'indietro:
Il modo migliore per concettualizzare le code è rendersi conto prima che al livello molto basso, ci sono solo due tipi di code: seriale e concomitante.
Code seriali sono monogame, ma senza impegno. Se assegni un sacco di compiti a ciascuna coda seriale, li eseguirà uno alla volta, usando solo un thread alla volta. L'aspetto non vincolato è che le code seriali possono passare a un thread diverso tra le attività. Le code seriali attendono sempre che un'operazione finisca prima di passare a quella successiva. Quindi le attività sono completate in ordine FIFO. È possibile creare tutte le code seriali necessarie con dispatch_queue_create
.
La coda è una coda seriale speciale. A differenza di altre code seriali, che non sono condivise, in quanto "datano" molti thread ma solo uno alla volta, la coda principale è "sposata" al thread principale e tutte le attività vengono eseguite su di esso.I lavori sulla coda principale devono comportarsi bene con il runloop in modo che le piccole operazioni non blocchino l'interfaccia utente e altri bit importanti. Come tutte le code seriali, le attività sono completate in ordine FIFO.
Se le code seriali sono monogame, le code simultanee sono promiscue. Essi invieranno compiti a qualsiasi thread disponibile o potranno persino creare nuovi thread in base al carico del sistema. Possono eseguire più attività contemporaneamente su thread diversi. È importante che le attività inviate alla coda globale siano thread-safe e riducano al minimo gli effetti collaterali. Le attività vengono inviate per l'esecuzione in ordine FIFO, ma l'ordine di completamento non è garantito. Al momento della stesura di questo documento, esistono solo tre code simultanee e non è possibile crearle, è possibile recuperarle solo con dispatch_get_global_queue
.
edit: post sul blog in espansione su questa risposta: http://amattn.com/p/grand_central_dispatch_gcd_summary_syntax_best_practices.html
Ya .. u scelto risposta sbagliata. La risposta di Robert Ryan è più appropriata –