risposta

5

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.

2

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.

3

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.

Problemi correlati