2009-10-17 186 views
14

我对GCD是如何工作有一个很好的想法,但我想知道更多关于被吹捧的“操作系统管理”内部的知识。对于Grand Central Dispatch如何与“操作系统”配合工作,几乎所有的技术解释都是完全不同的。我将解释我的一些发现。Grand Central Dispatch如何真正使用操作系统?

“这是一个守护进程的全局,超过许多 内核分配任务的OS 。”

我不傻,不相信。

“的支持内建于内核 知道所有GCD的应用。GCD 应用与 内核协同工作,以对 作出逻辑判断如何在 应用程序中管理线程。”

听起来像这种同步方案会比只管理应用程序内的逻辑慢得多。

“GCD是在 应用单独存在,并使用当前的系统负载 作为度量它的行为”。

这听起来对我来说比较现实,但我只在一个地方看到过这样的说法。

这里究竟发生了什么?它只是一个图书馆,还是整个“系统”?

回答

21

它是一个库,但有一些内核优化允许系统级别的控制。特别是,会发生什么是有一个额外的接口pthread_workqueue允许GCD告诉内核它想要一个线程运行某个特定的函数,但实际上并不启动一个线程(它基本上是一个延续)。此时内核可以选择是否启动该延续,具体取决于系统负载。

所以是的,有一个全局的系统范围的基础设施来管理内核中的GCD线程,第二个答案是正确的。你正在犯的错误是认为有同步正在进行,这将花费一些东西。无论如何,调度程序都会运行,GCD所做的是使用一个新的接口,它可以让调度程序不仅根据它们的相对优先级来决定是否运行线程,而且可以决定是否将线程创建或销毁为好。

这是一个(重要的)优化,但并不是绝对必要的,而FreeBSD的端口实际上并不支持系统级的东西。如果你想看看实际的界面,这里是pthread_workqueue.h,实现是在苹果的pthread.c,你可以看到存根入口点内核使用在start_wqthread.s开始在他们的汇编存根的工作队列。如果你真的想要的话,你也可以通过xnu爬行来查看它是如何上升到存根的。

+0

感谢您的详细解释!我的困惑,当我读到关于FreeBSD端口,想知道到底如何OSX版“OS”功能移植(虽然BSD)为库都开始!再次感谢+1 – 2009-10-17 20:50:12

相关问题