CFRunLoopSurce - 官方文档翻译

概览

  一个CFRunLoopSource对象就是对一个能被添加到runloop中的输入源的抽象。CFRunLoopSource通常用来产生异步事件,比如消息到达网络端口或者用户执行方法。
  一个输入源类型一般定义了创建和操作该类型对象的API,正如它是一个与run loop相独立的实体,并提供了为某个对象创建一个CFRunLoopSource对象的方法(函数)。这个输入源对象可以注册到runloop中,并作为run loop与真实输入源之间的媒介。输入源的例子包括CFMachPort,CFMessagePort和CFSocket.
  有两类CFRunLoopSurce,Source0和Source1。
  Sources0,如此命名是因为其上下文结构体中由程序管理的版本字段为0.当一个源准备触发时,程序的某个部分(可能是独立线程中等待事件的代码)必须调用CFRunLoopSourceSignal()函数来告知run loop该源正在准备触发。当前CFSocket是基于Source0实现的。
  Source1,由run loop和内核来管理。这类型的源使用mach port来通信标记自己准备触发。当一条消息到达源的端口上时,该源被内核自动标记。当该源触发后,消息中内容就交给该源来处理。当前CFMachPort、CFMessagePort是基于Source1实现的。
  当创建自定义的run loop输入源时,你能自己选择类型(Source0或者Source1)。
  一个run loop输入源能在同时被添加到多个run loop和多个run loop mode中。当源被标记后,无论哪一个run loop第一次发现了该标记信号都会触发该源。将一个源添加到多个线程的多个run loop中可以用来管理处理数据离散集合的worker threads的线程池,比如,一个client-server消息通过网络发送或者管理线程将任务置入队列中时,当消息到达或者任务置入队列,这个源就会标记触发,随后一个随机的线程就会收到并处理这个请求。

原文

A CFRunLoopSource object is an abstraction of an input source that can be put into a run loop. Input sources typically generate asynchronous events, such as messages arriving on a network port or actions performed by the user.

An input source type normally defines an API for creating and operating on objects of the type, as if it were a separate entity from the run loop, then provides a function to create a CFRunLoopSource for an object. The run loop source can then be registered with the run loop and act as an intermediary between the run loop and the actual input source type object. Examples of input sources include CFMachPort, CFMessagePort, and CFSocket.

There are two categories of sources. Version 0 sources, so named because the version field of their context structure is 0, are managed manually by the application. When a source is ready to fire, some part of the application, perhaps code on a separate thread waiting for an event, must call CFRunLoopSourceSignal to tell the run loop that the source is ready to fire. The run loop source for CFSocket is currently implemented as a version 0 source.

Version 1 sources are managed by the run loop and kernel. These sources use Mach ports to signal when the sources are ready to fire. A source is automatically signaled by the kernel when a message arrives on the source’s Mach port. The contents of the message are given to the source to process when the source is fired. The run loop sources for CFMachPort and CFMessagePort are currently implemented as version 1 sources.

When creating your own custom run loop source, you can choose which version works best for you.

A run loop source can be registered in multiple run loops and run loop modes at the same time. When the source is signaled, whichever run loop that happens to detect the signal first will fire the source. Adding a source to multiple threads’ run loops can be used to manage a pool of “worker” threads that is processing discrete sets of data, such as client-server messages over a network or entries in a job queue filled by a “manager” thread. As messages arrive or jobs get added to the queue, the source gets signaled and a random thread receives and processes the request.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容

  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,446评论 0 13
  • The NSRunLoop class declares the programmatic interface t...
    刘帅_阅读 983评论 0 2
  • 宝宝睡得很香 我躺在她旁边 看着她熟睡的脸蛋 忍不住不停地亲吻她的小额头 还摸着她露出的小手瓜 握着她的小腿丫 心...
    小栅栅阅读 94评论 0 0
  • 这是我第一次在简书上写文章,文笔也不是很好看,可能思路也不是很清晰,只是想到什么就写下来了,不过写下的都是真情实感...
    懵懂的孩子阅读 417评论 0 1
  • 寂静的夜伴随着寒冷的天气,把我带进了无限的思念中。与你的短短相聚是那么的美好,也是那么的痛苦。我恨时间为什...
    乙晴阅读 191评论 0 0