NSRunLoop实施

ker*_*nix 1 objective-c nsrunloop ios

我对NSRunLoop实现空闲/休眠线程的能力感兴趣,而没有强烈的CPU使用.如何在Objective-c中实现这一目标?消耗高CPU的天真解决方案是(YES){...}

Ken*_*ses 5

一般来说,有很多系统调用会阻塞.也就是说,它们将导致内核挂起线程,并且在发生某些特定事件或状态更改之前不给它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端口的形式)来触发(接收消息)或定时器.