Supponiamo che io chiamo dispatch_async()
tre volte al fine:La coda Grand Central Dispatch principale è seriale o concomitante?
dispatch_async(dispatch_get_main_queue(),
^{
[self doOne];
});
// some code here
dispatch_async(dispatch_get_main_queue(),
^{
[self doTwo];
});
// more code here
dispatch_async(dispatch_get_main_queue(),
^{
[self doThree];
});
sarà questo sempre essere eseguito come
[self doOne]
, [self doTwo]
, quindi [self doThree]
, o è l'ordine è garantito?
In questo caso, la domanda probabilmente è se la coda principale è seriale o concomitante.
Inoltre, deve essere seriale poiché i blocchi vengono eseguiti sullo stesso thread. Non è possibile che un singolo thread possa eseguire contemporaneamente più blocchi. – Sven
@Rob Sì, ma i blocchi inviati alla coda principale verranno eseguiti nel thread principale. Questo è l'intero punto della coda principale. Le code non eseguono blocchi, ciò accade sempre in alcuni thread. Di solito un thread privato gestito da GCD, ma il thread principale per la coda principale. – Sven
@Sven Mi hai frainteso. Il mio punto è semplicemente quello di chiarire che questo è vero per la coda principale, non applicabile alle code in generale. – Rob