Ios Grand Central Dispatch如何真正使用操作系统?

Ios Grand Central Dispatch如何真正使用操作系统?,ios,objective-c,grand-central-dispatch,Ios,Objective C,Grand Central Dispatch,我对GCD的工作原理有一个明确的想法,但我想知道更多关于被吹捧的“操作系统管理”的内部内容。对于中央调度如何与“操作系统”协同工作,几乎所有的技术解释都是完全不同的。我将解释我的一些发现 “它是一个对操作系统全局的守护进程 将任务分配到多个服务器上 核心。” 我还没傻到相信那一点 “内核内置了支持,以 了解所有GCD应用程序。GCD 应用程序与 内核来做出逻辑决策 如何管理 应用程序。” 听起来这个同步方案比仅仅管理应用程序中的逻辑要慢得多 “GCD仅存在于 应用程序和使用当前系统 加载作为衡量

我对GCD的工作原理有一个明确的想法,但我想知道更多关于被吹捧的“操作系统管理”的内部内容。对于中央调度如何与“操作系统”协同工作,几乎所有的技术解释都是完全不同的。我将解释我的一些发现

“它是一个对操作系统全局的守护进程 将任务分配到多个服务器上 核心。”

我还没傻到相信那一点

“内核内置了支持,以 了解所有GCD应用程序。GCD 应用程序与 内核来做出逻辑决策 如何管理 应用程序。”

听起来这个同步方案比仅仅管理应用程序中的逻辑要慢得多

“GCD仅存在于 应用程序和使用当前系统 加载作为衡量其行为的指标。”

对我来说,这听起来更现实,但我只在一个地方看到了这样的陈述


这到底是怎么回事?它只是一个库,还是一个完整的“系统”?

它是一个库,但有一些内核优化允许系统级控制。特别是,这里有一个添加接口
pthread_workqueue
,它允许GCD告诉内核它想要一个线程运行某个特定函数,但实际上并不启动线程(它基本上是一个延续)。在这一点上,内核可以根据系统负载选择是否启动该延续

是的,有一个全球系统范围的基础设施来管理内核中的GCD线程,第二个答案是正确的。你犯的错误是,你认为有同步正在进行,这将付出一些代价。无论发生什么情况,调度程序都将运行,GCD所做的是使用一个新的接口,该接口不仅允许调度程序根据线程的相对优先级决定是否运行线程,还允许调度程序决定是否创建或销毁线程


这是一个(重要的)优化,但严格来说并不是必需的,而且FreeBSD端口实际上不支持系统范围的东西。如果您想查看实际的接口,这里是Apple的实现,您可以看到内核用于启动asm存根中的工作队列的存根入口点。如果您真的愿意,您也可以通过xnu来查看它是如何向上调用存根的。

谢谢您的详细解释!当我读到FreeBSD端口时,我开始感到困惑,我想知道OSX“OS”特性是如何被移植(尽管是BSD)为库的!再次感谢+1