“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.”
这对我来说听起来更现实,但我只是在一个地方看到这样的声明.
这里真的发生了什么?它只是一个图书馆,还是整个“系统”?
解决方法
所以是的,有一个全局系统的基础架构管理内核中的GCD线程,第二个答案是正确的.你所犯的错误是认为在那里会出现同步,这将会导致一些费用.调度程序将运行,无论什么,GCD已经做了什么,使用一个新的界面,让调度程序不仅决定是否根据它们的相对优先级运行线程,而且是否创建或销毁线程好.
这是一个(重大)优化,但并不是绝对必要的,FreeBSD端口实际上并不支持系统范围的内容.如果要查看实际的接口,这里是pthread_workqueue.h,实现在Apple的pthread.c中,您可以看到内核用于在start_wqthread.s的asm存根中启动工作队列的存根入口点.您还可以通过爬网xnu看看如果你真的想要它如何调用到存根.