设为首页 加入收藏

TOP

iOS并发编程指南
2014-11-24 12:46:54 来源: 作者: 【 】 浏览:0
Tags:iOS 并发 编程 指南

iOS Concurrency Programming Guide


iOS 和 Mac OS 传统的并发编程模型是线程,不过线程模型伸缩性不强,而且编写正确的线程代码也不容易。Mac OS 和 iOS 采取 asynchronous design approach 来解决并发的问题。


引入的异步技术有两个:


Grand Central Dispatch:系统管理线程,你不需要编写线程代码。只需定义想要执行的任务,然后添加到适当的dispatch queue。Grand Central Dispatch会负责创建线程和调度你的任务。系统直接提供线程管理,比应用实现更加高效。


Operation Queue:Objective-C对象,类似于dispatch queue。你定义想要执行的任务,并添加任务到operation queue,后者负责调度和执行这些任务。和Grand Central Dispatch一样,Operation Queue也管理了线程,更加高效


Dispatch Queue


基于C的执行自定义任务机制。dispatch queue按先进先出的顺序,串行或并发地执行任务。serial dispaptch queue一次只能执行一个任务,直接当前任务完成才开始出列并启动下一个任务。而concurrent dispatch queue则尽可能多地启动任务并发执行。


优点:


直观而简单的编程接口


提供自动和整体的线程池管理


提供汇编级调优的速度


更加高效地使用内存


不会trap内核under load


异步分派任务到dispatch queue不会导致queue死锁


伸缩性强


serial dispatch queue比锁和其它同步原语更加高效


Dispatch Sources


Dispatch Sources 是基于C的系统事件异步处理机制。一个Dispatch Source封装了一个特定类型的系统事件,当事件发生时提交一个特定的block对象或函数到dispatch queue。


你可以使用Dispatch Sources监控以下类型的系统事件:


定时器


信号处理器


描述符相关的事件


进程相关的事件


Mach port事件


你触发的自定义事件


Operation Queues


Operation Queues是Cocoa版本的并发dispatch queue,由 NSOperationQueue 类实现。dispatch queue总是按先进先出的顺序执行任务,而 Operation Queues 在确定任务执行顺序时,还会考虑其它因素。最主要的一个因素是指定任务是否依赖于另一个任务的完成。你在定义任务时配置依赖性,从而创建复杂的任务执行顺序图。


提交到Operation Queues的任务必须是 NSOperation 对象,operation object封装了你要执行的工作,以及所需的所有数据。由于 NSOperation 是一个抽象基类,通常你需要实现一个自定义子类来执行任务。不过Foundation framework自带了一些具体子类,你可以创建并执行相关的任务。


Operation objects会产生key-value observing(KVO)通知,对于监控任务的进程非常有用。虽然operation queue总是并发地执行任务,你可以使用依赖,在需要时确保顺序执行。


异步设计技术


通过确保主线程自由响应用户事件,并发可以很好地提高应用的响应性。通过将工作分配到多核,还能提高应用处理的性能。但是并发也带来一定的额外开销,并且使代码更加复杂,更难编写和调试代码。


因此在应用设计阶段,就应该考虑并发,设计应用需要执行的任务,及任务所需的数据结构。


Operation Queues


基于Objective-C,因此基于Cocoa的应用通常会使用Operation Queues


Operation Objects


operation object 是 NSOperation 类的实例,封装了应用需要执行的任务,和执行任务所需的数据。NSOperation 本身是抽象基类,我们必须实现子类。Foundation framework提供了两个具体子类,你可以直接使用:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android事件监听器(Event Listen.. 下一篇Unity3D在Android上播放视频及rem..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·常用meta整理 | 菜鸟 (2025-12-25 01:21:52)
·SQL HAVING 子句:深 (2025-12-25 01:21:47)
·SQL CREATE INDEX 语 (2025-12-25 01:21:45)
·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)