Grand Central Dispatch中的主線究竟是什麼?它是在程序啓動時創建的線程(可能在調用main()
函數之前),它被任意稱爲「主線程」?或者它是程序的主執行流程,它始終爲每個正在運行的進程創建?我認爲第一種選擇是正確的,因爲不可能發送塊由程序的主執行流程執行,我想,除非這是明確完成的。因此,GCD中的主線程必須是創建用於等待塊執行的另一個線程。這樣對嗎?GCD的主線是什麼?
0
A
回答
1
GCD沒有主線程,除非在基於CF/Foundation的進程中運行,而該進程有自己的一個進程。如果您使用dispatch_main,則不存在主線程。
1
OS X上的每個UI應用程序都有一個主線程 - 這是UI更新(並且必須)執行的地方。 GCD將一個隊列與該線程(主隊列)相關聯,並且也可以自由地在該線程上執行來自其他隊列的塊,但實際上,它通常會爲此目的創建其他線程,因爲通常認爲它不適合阻止主線程任何時間長度(這樣做都會引起可怕的SPOD,或者死亡,遊標的旋轉比薩餅)。
調用dispatch_main()也不會銷燬或消除對主線程的需求,它只是阻止它(這就是爲什麼UI應用程序應該使用運行循環代替)。
相關問題
- 1. 輸出是什麼? GCD
- 2. GCD返回主線程
- 3. GCD中線程和隊列之間的關係是什麼?
- 4. 是否必須在主線程上執行GCD主隊列?
- 5. 主線程上的多個GCD調度
- 6. GCD中的「全局隊列」和「主隊列」有什麼區別?
- 7. GCD - 在主隊列
- 8. 我的GCD算法有什麼問題?
- 9. 主題是什麼
- 10. 找到n個數字的gcd最快的方法是什麼?
- 11. 以下GCD /塊方案的推薦模式是什麼?
- 12. 什麼是計算3個數字GCD的方法
- 13. 什麼是在線
- 14. 什麼是線程?
- 15. 什麼是線程?
- 16. GCD - 用於更新UIImageView的主要vs後臺線程
- 17. 什麼阻止我的主線程?
- 18. 我的路線是什麼?
- 19. 具體是什麼線的
- 20. GCD Dispatch Sources和select()有什麼區別?
- 21. 爲什麼GCD增加執行時間?
- 22. 是否更快地解析主線程上的XML?爲什麼?
- 23. Codeigniter - database.php什麼是在線服務器的主機名?
- 24. 主線程處理廣播接收器的概念是什麼
- 25. 線程「主」中的異常,這是什麼意思?
- 26. 爲什麼我所有的mpi線程都是主人?
- 27. C#WPF應用程序中主線程的職責是什麼?
- 28. 什麼是導致「主線程工作太多」的警告?
- 29. iOS GCD:主線程從主隊列以外的隊列中取出隊列?
- 30. 爲什麼我的數組被GCD調度清除到主隊列?
所以你的意思是CoreFoundation是誰創建所謂的主線程和這個線程等事件,如塊調度事件?如果是的話,這個線程是一個CFRunLoop,它總是爲所有與CoreFoundation鏈接的程序隱式創建的? – LuisABOL 2013-05-03 00:33:29
線程不是runloops。線程有runloops。然而,主隊列確實與主循環集成並由其驅動。在純libdispatch程序中,您不會使用主隊列。 – 2013-05-03 00:37:26
對於我對線程和runloops所說的內容感到抱歉;我表達得很差。但是,無論如何,非常感謝! – LuisABOL 2013-05-03 00:43:08