我对 NSRunLoop 的实现很感兴趣,它可以在不占用大量 CPU 的情况下让线程空闲/休眠。这在 Objective-c 中是如何实现的?消耗高 CPU 的简单解决方案是 while(YES) {...}
最佳答案
一般来说,有很多系统调用会阻塞。也就是说,它们将导致内核挂起线程并且不给它 CPU 时间,直到发生某些特定事件或状态更改。诸如 kevent()
、poll()
、select()
、read()
之类的非纯文本-文件描述符等
关于 NSRunLoop
具体来说,它是围绕 CFRunLoop
构建的,它是开源的:https://www.opensource.apple.com/source/CF/CF-855.11/CFRunLoop.c .它在 OS X 和 iOS 上使用 Mach API。特别是,它会调用 mach_msg()
来等待输入源(以 Mach 端口的形式)触发(接收消息)或计时器结束。
关于ios - NSRunLoop 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23167551/