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看看如果你真的想要它如何调用到存根.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...