Ci sono dei casi in cui qualcuno vorrebbe usare NSThreads grezzi invece di GCD per concorrenza? Amo il GCD, ma voglio sapere se avrò bisogno di usare NSThreads per Cocoa/Cocoa-Touch alla fine.Quando qualcuno vorrebbe utilizzare NSThreads sul GCD?
risposta
io uso pthread
s per controllo, buone prestazioni e portabilità. a volte, potresti scegliere di utilizzare NSThread
per l'interfaccia aggiuntiva NSObject
che offre.
ci sono alcune interfacce di livello inferiore in cui è necessario coordinare i thread con le API che si utilizzano (ad esempio I/O in tempo reale o rendering). a volte si ha flessibilità per quanto riguarda il thread che si usa, a volte è conveniente utilizzare NSThread
in questa situazione in modo da poter utilizzare facilmente i loop di esecuzione CF o NS con queste interfacce. Quindi il parametro del ciclo di esecuzione impostato sul thread è probabilmente più interessante per l'API rispetto al thread stesso. in questi casi, GCD potrebbe non essere necessariamente un'alternativa.
ma ... la maggior parte degli sviluppatori non ha bisogno di scendere a questi livelli spesso.
Ci possono essere alcune situazioni speciali in cui devi fare qualcosa di strano che non può essere fatto con GCD. Ma qualsiasi cosa tu possa fare con GCD dovresti farlo in questo modo (GCD e thread non si escludono a vicenda, se hai bisogno di usare effettivamente un thread non è necessario modificare nessuno dei contenuti GCD che hai già).
Non so comunque quale sarebbe il caso. Forse se hai bisogno di impostare un RunLoop specializzato secondario (non sono sicuro se può essere fatto con GCD ma sicuramente può farlo con un thread). Oppure potrebbe esserci qualche altro caso speciale che non riesco a capire al momento.
In pratica, non è quasi mai necessario utilizzare le API NSThread/pthread direttamente su OS X o iOS. Su altre piattaforme, probabilmente sì (anche se GCD sta diventando più ampiamente portato su * BSD, Linux e persino Windows - vedi la pagina Wikipedia per Grand Central Dispatch), ma su piattaforme Apple OS otterrai quasi sempre un risultato migliore il sistema per fare la gestione del ciclo di vita dei thread per te. L'unico caso in cui si potrebbe desiderare di fare la propria gestione dei thread è in scenari altamente real-time in cui è necessario gestire le priorità dei thread e avere un controllo diretto sulla latenza dei thread bilanciando la quantità di lavoro che ogni thread sta facendo a mano.