我对NSRunLoop功能的实现感兴趣,可以在不占用大量CPU的情况下空闲/休眠其线程。在Objective-c中如何实现?消耗大量CPU的天真的解决方案的时间是(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/