我对NSRunLoop的实现很感兴趣,它可以在不占用大量CPU的情况下空闲/休眠它的线程。如何在目标-c中实现这一点?消耗高CPU的朴素解决方案是同时(是){.}
发布于 2014-04-19 08:49:43
一般来说,有许多系统调用将被阻塞。也就是说,它们将导致内核挂起线程,在发生特定事件或状态更改之前不会给它CPU时间。比如kevent()
、poll()
、select()
、非普通文件描述符上的read()
等等.
具体来说,关于NSRunLoop
,它是围绕CFRunLoop
构建的,它是开源的:https://www.opensource.apple.com/source/CF/CF-855.11/CFRunLoop.c。它在OS和iOS上使用Mach。特别是,它调用mach_msg()
等待输入源(以Mach端口的形式)触发(接收消息)或计时器。
发布于 2016-04-05 14:45:19
本质上,NSRunLoop是一个
事件驱动模式。我们使用
pipe()
生成两个fd(一个用于读,一个用于写)。我们可以通过在其他线程中写入一些字节来“写入”fd来唤醒线程(谁读取了“读”fd)。
有关更多信息,可以参考此项目。
https://github.com/wuyunfeng/LightWeightRunLoop (使用BSD实现iOS RunLoop和运行环相关的基本API,如对其他线程执行选择器(或延迟一些时间)、计时器、URLConnection等)。
希望这能帮到你。
https://stackoverflow.com/questions/23167551
复制相似问题