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.
- 1. Quando si vorrebbe usare OneTuple?
- 2. GCD con NSURLConnection
- 3. Coda seriale FIFO tramite GCD
- 4. NSOperationQueue vs GCD
- 5. Quando utilizzare una HashTable
- 6. Interrompe l'esecuzione di un GCD, quando il ViewController è spuntato
- 7. blocco @synchronized GCD dispatch_async()
- 8. GCD dispatch_async e NSURLConnection
- 9. Riutilizzo UITableViewCell con GCD
- 10. Numpy gcd function
- 11. Daga 2: quando utilizzare le iniezioni del costruttore e quando utilizzare le iniezioni sul campo?
- 12. Esegui ripetendo NSTimer con GCD?
- 13. Qualcuno sa come utilizzare PagerTitleStrip in Android
- 14. Qualcuno ha mai provato a utilizzare DialerFilter?
- 15. Perché qualcuno dovrebbe utilizzare Collections.emptyList in java?
- 16. Qualcuno usa ICEpush sul server di produzione sotto carico pesante?
- 17. Algoritmo euclideo (GCD) con più numeri?
- 18. GCD dispatch_async perdita di memoria?
- 19. Quando utilizzare le informazioni sul tipo di runtime?
- 20. Cattura risposta a "App vorrebbe inviare notifiche push" avviso
- 21. Qualcuno può dirmi dettagli sul file hs_err_pid.log generato quando Tomcat si arresta in modo anomalo?
- 22. Come posso cambiare il testo "L'app vorrebbe utilizzare la posizione corrente?"
- 23. Blocco lettura-scrittura con GCD
- 24. Quando utilizzare NSEnumerationConcurrent
- 25. qualcuno sta facendo qualcosa sul bug time_t 2038?
- 26. Vorrebbe cambiare l'opacità di un NSPopover - è possibile?
- 27. Quando utilizzare JMS e quando utilizzare REST?
- 28. Quando utilizzare le categorie e quando utilizzare la sottoclasse?
- 29. Qualcuno ha provato a utilizzare la variabile di ambiente UV_THREADPOOL_SIZE?
- 30. Quando utilizzare un modulo e quando utilizzare una classe