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

我有一个坚实的想法,GCD如何工作,但我想了解更多关于吹捧的“操作系统管理”内部.大中央派遣机构与“操作系统”的运作方式几乎完全不一样.我会改写我的一些发现.

“It’s a daemon that’s global to the OS
that distributes tasks over many
cores.”

我不是很愚蠢地相信.

“Support is built into the kernel to
be aware of all GCD applications. GCD
applications work in concert with the
kernel to make logical decisions on
how to manage threads within the
application.”

听起来像这样的同步方案比在应用程序中管理逻辑要慢得多.

“GCD is exists solely in the
application and uses current system
load as a metric to how it behaves.”

这对我来说听起来更现实,但我只是在一个地方看到这样的声明.

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

解决方法

它是一个库,但有一些内核优化允许系统级别控制.特别地,发生的是,有一个附加接口pthread_workqueue,允许GCD告诉内核,它希望线程运行一些特定的功能,但实际上并不启动一个线程(它基本上是一个延续).在这一点上,根据系统负载,内核可以选择启动该延续.

所以是的,有一个全局系统的基础架构管理内核中的GCD线程,第二个答案是正确的.你所犯的错误是认为在那里会出现同步,这将会导致一些费用.调度程序将运行,无论什么,GCD已经做了什么,使用一个新的界面,让调度程序不仅决定是否根据它们的相对优先级运行线程,而且是否创建或销毁线程好.

这是一个(重大)优化,但并不是绝对必要的,FreeBSD端口实际上并不支持系统范围的内容.如果要查看实际的接口,这里是pthread_workqueue.h,实现在Apple的pthread.c中,您可以看到内核用于在start_wqthread.s的asm存根中启动工作队列的存根入口点.您还可以通过爬网xnu看看如果你真的想要它如何调用到存根.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...