首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSRunLoop实现

NSRunLoop实现
EN

Stack Overflow用户
提问于 2014-04-19 08:01:58
回答 2查看 885关注 0票数 2

我对NSRunLoop的实现很感兴趣,它可以在不占用大量CPU的情况下空闲/休眠它的线程。如何在目标-c中实现这一点?消耗高CPU的朴素解决方案是同时(是){.}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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端口的形式)触发(接收消息)或计时器。

票数 6
EN

Stack Overflow用户

发布于 2016-04-05 14:45:19

本质上,NSRunLoop是一个

事件驱动模式。我们使用pipe()生成两个fd(一个用于读,一个用于写)。我们可以通过在其他线程中写入一些字节来“写入”fd来唤醒线程(谁读取了“读”fd)。

有关更多信息,可以参考此项目。

https://github.com/wuyunfeng/LightWeightRunLoop (使用BSD实现iOS RunLoop和运行环相关的基本API,如对其他线程执行选择器(或延迟一些时间)、计时器、URLConnection等)。

希望这能帮到你。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23167551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档