2012-03-22 2 views

Répondre

31

Vous êtes confus entre ce que signifie une file d'attente et ce que signifie synchrone ou asynchrone.

Une file d'attente est une entité sur laquelle des blocs peuvent être exécutés. Ceux-ci peuvent être en série ou simultanés. Serial signifie que si vous mettez un bloc dans l'ordre A, B, C, D, alors ils seront exécutés A, puis B, puis C, puis D. Concurrent signifie que ces mêmes blocs peuvent être exécutés dans un ordre différent et éventuellement même plus d'un en même temps (en supposant que vous ayez plusieurs cœurs sur lesquels exécuter, évidemment).

Puis sur async vs sync. Async signifie que lorsque vous appelez dispatch_async, il renverra immédiatement et le bloc sera mis en file d'attente dans la file d'attente. Sync signifie que lorsque vous appelez dispatch_sync, il ne reviendra qu'après l'exécution du bloc. Donc pour répondre complètement à votre question, si vous dispatch_sync sur une file d'attente concurrente globale, ce bloc sera exécuté, peut-être en parallèle avec d'autres blocs de cette file d'attente, mais de manière synchrone - c'est-à-dire qu'il ne retournera pas jusqu'à le bloc est fini.

+1

belle réponse: ') – LuisEspinoza

+0

Merci :-).Il y a certainement de la place pour plus d'explications, mais c'est un début et je répondrai à toutes les questions de @keywind. – mattjgalloway

+0

Merci beaucoup pour la réponse – keywind

0

d'Apple Doc dit

dispatch_get_global_queue

Renvoie une file d'attente concurrente globale bien connue d'un niveau de priorité donné.

dispatch_queue_t dispatch_get_global_queue ( priorité longue, drapeaux longs non signés);

Paramètres

priorité

La priorité de la file d'attente en cours de récupération. Pour une liste des valeurs possibles, voir "dispatch_queue_priority_t". flags Cette valeur est réservée pour une utilisation future. Vous devez toujours passer 0. Return Value Renvoie la file d'attente globale demandée.

Discussion

Les ne peuvent pas être modifiées files d'attente concurrentes mondiales bien connues. Les appels à dispatch_suspend, dispatch_resume, dispatch_set_context et n'ont pas d'effet lorsqu'ils sont utilisés avec des files d'attente renvoyées par cette fonction .

Les blocs soumis à ces files d'attente simultanées globales peuvent être exécutés simultanément entre eux en .

Disponibilité Disponible sur iOS 4.0 et versions ultérieures. Déclaré Dans envoi/queue.h

Dans la discussion, ils ont dit that-> « blocs présentés peuvent être exécutés en même temps que l'autre WRT. »

Ainsi les tâches peuvent être traitées Async les unes avec les autres.