IOS系统中不同多线程技术研究和比较.docVIP

IOS系统中不同多线程技术研究和比较.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
IOS系统中不同多线程技术研究和比较

IOS系统中不同多线程技术研究和比较   【摘要】 随着苹果手机在智能手机市场取得的成功,iOS系统也在被广大用户熟识和喜爱,其内部架构设计也在被越来越多的技术开发人员所剖析、研究和运用。本文从多线程的相关概念出发,对iOS系统中主流的三种多线程实现技术进行了研究和分析,并通过分析比较,总结了三者之间的不同以及优缺点,将对相关系统开发起到借鉴意义。   【关键词】 iOS系统 多线程 NSThread GCD NSOperation   一、引言   从2007年第一代iPhone推出至今历经了六代的发展,苹果手机已经成为智能手机市场举足轻重的一员,除去时尚的外表,卓越的性能和绝佳的用户体验也是苹果手机长盛不衰的重要原因,而这正离不开iOS系统中对多线程技术的设计和实现。   本文将以多线程概念为切入点,对比分析三种主要的多线程技术并分析各自优缺点,最后给出了在实际开发过程中应侧重采用哪种技术的建议。   二、多线程概述   2.1 进程与线程   进程是指正在运行中的程序,它负责程序运行时的内存分配,每一个进程都有自己独立的虚拟内存空间。   线程是进程中一个独立的控制单元,一个进程中至少包含一条线程,即主线程,在程序运行时,可以将耗时的执行路径放在其他线程中执行,线程不能被终结,但是可以被暂停或者休眠。   2.2 多线程概念   多线程(multithreading),指的是在软件或硬件上让多个线程实现并发执行的技术。一台计算机具有多线程能力,再加上硬件的支持,因而能够在同一时间执行多于一个线程,进而使整体处理性能得到提升。具有这种能力的处理器包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。   2.3 iOS系统中的线程   在iOS系统程序启动中,创建好一个进程的同时,一个线程便开始运行,这个线程叫主线程。主线程在程序中的地位和其他线程不同,它是其他线程最终的父线程,且所有界面的显示操作即UIKit的操作必须在主线程进行。iOS每个进程中可以开启多个线程,由操作系统分配短暂的时间片轮流使用CPU,由于CPU对每个时间片的处理速度非常快,因此,从用户使用角度来看,任务是同时执行的。   三、iOS系统中三种多线程技术研究   3.1 NSThread多线程实现   NSThread是iOS系统多线程实现技术里相对轻量级的,但也是使用起来需要开发人员自己维护的:需要自己管理thread的生命周期,线程之间的同步等等问题。当不同线程需要共享同一应用程序的部分内存空间时,它们拥有对数据相同的访问权限,这就需要开发人员协调多个线程对同一数据的访问,而这种协调操作会导致一定的性能开销。   NSThread的初始化有静态和动态两种方法:   静态实现方法:   +(void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument;   动态实现方法:   -(id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument;   其中,selector:线程执行的方法,这个selector最多只能接收一个参数;target:selector消息发送的对象;argument: 传给selector的唯一参数,也可以是nil。   这两种方式的区别是:前者在实现后就会立即创建一个线程来做事情;而后者虽然初始化完成,但是需要手动调用start启动线程时才会真正去创建线程。   3.2 GCD多线程实现   GCD(Grand Central Dispatch),是基于C语言的底层API。GCD的基本概念就是dispatch queue。dispatch queue是一个对象,它可以接受任务,并将任务以先到先执行的顺序来执行。dispatch queue可以是并发的或串行的。并发任务会像NSOperationQueue那样基于系统负载来合适地并发进行,串行队列同一时间只执行单一任务。   GCD的基本思想就是将操作放在队列中去执行,要使用队列,首先需要调用函数dispatch_queue_create进行创建,队列负责调度任务执行所在的线程以及具体的执行时间。其次向一个队列提交操作,通过调用dispatch_async函数,传入一个队列和一个操作。队列会在轮到这个block执行时执行该操作。   GCD中有四种主要队列:   串行队列:同步操作不会新建线程,操作顺序执行;异步操作会新建线程,操作顺序执行。   并行队列:同步操作不会新建线程,操作顺序执行;异步操作会新建多个线程

文档评论(0)

317960162 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档