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