是否有任何情況下任何人想要使用原始NSThreads而不是GCD進行併發?我喜歡GCD,但我想知道是否需要最終使用NSThreads來製作Cocoa/Cocoa-Touch。什麼時候有人想要通過GCD使用NSThreads?
7
A
回答
5
我使用pthread
來控制,性能好,便於攜帶。有時,您可能會選擇使用NSThread
作爲其提供的額外NSObject
接口。
有幾個較低級別的接口,您需要將線程與您使用的API(例如實時I/O或渲染)進行協調。有時你對使用的線程有靈活性,有時在這種情況下使用NSThread
很方便,所以你可以很容易地在這些接口上使用CF或NS運行循環。因此,您在線程上設置的運行循環參數可能比API本身更感興趣。在這些情況下,GCD可能不一定是替代方案。
但是......大多數開發者不需要經常下降到這些水平。
2
可能會出現一些特殊情況,您必須執行一些GCD無法做到的奇怪事情。但是任何你可以用GCD做的事都應該這樣做(GCD和線程並不相互排斥,如果你需要實際使用一個線程,你不需要改變你已有的GCD)。
但是不確定會是什麼情況。也許如果你需要設置一個輔助的專用RunLoop(不確定它是否可以用GCD完成,但它肯定可以用一個線程來完成)。或者可能還有其他一些特殊情況我現在無法確定。
3
您幾乎從不需要直接在OS X或iOS上使用NSThread/pthread API。在其他平臺上,可能是(儘管GCD正越來越多地被移植到* BSD,Linux甚至Windows - 請參閱Grand Central Dispatch的維基百科頁面),但在Apple OS平臺上,您幾乎總是可以通過允許系統爲你做線程生命週期管理。你可能想要做自己的線程管理的唯一情況是在高度實時的情況下,你需要管理線程優先級並通過平衡每個線程正在進行的工作量來直接控制線程延遲。
相關問題
- 1. 什麼時候會想要使用OneTuple?
- 2. 什麼時候使用Server.Transfer通過PostBackURL?
- 3. 什麼時候通過NSURLConnection使用Restkit?
- 4. 什麼時候使用GWT,什麼時候不需要
- 5. Java:你想要什麼時候自定義序列化過程?
- 6. 我什麼時候想要通過實際的類聲明接口?
- 7. Application.DoEvents,什麼時候需要,什麼時候不需要?
- 8. 我什麼時候需要使用@WebServiceRef?
- 9. 什麼時候需要使用ng-template?
- 10. 我什麼時候需要使用MPI_Barrier()?
- 11. 什麼時候使用Cache要多少?
- 12. 我什麼時候需要使用「android:id」?
- 13. 什麼時候有人關注 - Twitter API
- 14. 什麼時候我們需要通過引用函數創建通過/呼叫
- 15. 什麼時候使用__proto__和什麼時候使用原型
- 16. 什麼時候應該使用AWS,什麼時候不使用
- 17. intn_t什麼時候使用它,什麼時候不使用
- 18. 什麼時候使用Ruby和什麼時候使用PHP
- 19. 什麼時候使用ByteString,什麼時候不使用?
- 20. 什麼時候通過ref關鍵字
- 21. addEvents的要點/效用是什麼?它什麼時候有用?
- 22. 什麼時候需要CAMLparamX?
- 23. 什麼時候需要pygame.init()?
- 24. 什麼時候需要NSCopying?
- 25. 什麼時候需要NS_RETURNS_RETAINED?
- 26. 什麼時候需要「javascript:...」?
- 27. 什麼時候需要TransactionScopeOption.Supress?
- 28. 什麼時候需要dynamic_cast?
- 29. 什麼時候需要curl_global_init()?
- 30. 爲什麼會有人想要使用Invoke()(不是BeginInvoke())?