Grand Central Dispatch 的主线到底是什么?它是程序启动时创建的线程(可能就在main()
函数被调用之前),被任意称为“主线程”?还是程序的主要执行流程,总是为每个正在运行的进程创建?我认为第一个选项是正确的,因为我猜不可能发送要由程序的主执行流程执行的块,除非这是明确完成的。因此,GCD 中的主线程必须是为等待块执行而创建的另一个线程。这样对吗?
问问题
235 次
2 回答
1
GCD 没有主线程,除非在基于 CF/Foundation 的进程的上下文中运行,该进程拥有自己的一个。如果您使用 dispatch_main 则没有主线程。
于 2013-05-02T18:58:22.307 回答
1
OS X 上的每个 UI 应用程序都有一个主线程——它是(并且必须)执行 UI 更新的地方。GCD 将队列与该线程(主队列)相关联,并且还可以自由地执行来自该线程上其他队列的块,但实际上,它通常为此目的创建其他线程,因为通常认为不建议阻塞主线程任何时间长度(这样做会带来可怕的 SPOD,或旋转的死亡披萨,光标)。
调用 dispatch_main() 也不会破坏或消除对主线程的需要,它只是阻塞它(这就是 UI 应用程序应该使用运行循环的原因)。
于 2013-05-03T15:17:19.513 回答