学习 iOS多线程开发 Demo示意

时间:2014-05-15 02:19:14   收藏:0   阅读:393

  并发所描述的概念就是同时运行多个任务。这些任务可能是以在单核 CPU 上分时(时间分享)的形式同时运行,也可能是在多核 CPU 上以真正的并行方式来运行。这篇文章是作者在学习iOS开发技术当中,遇到多线程问题时捋顺思路时的一些看法。

  GCD是iOS开发当中解决多核开发的一个技术。

  主要有三种队列:一、运行在主线程的 Main queque   通过dispatch_get_main_queque 来获取

          二、并行队列 global dispatch queque ,通过dispatch_get_global_queque 获取。并行队列的优先级 有 high ,default , low。

          三、串行队列 serial queues一般用于按顺序同步访问,可创建任意数量的串行队列,各个串行队列之间是并发的。当想要任务按照某一个特定            的顺序执行时,串行队列是很有用的。串行队列在同一个时间只执行一个任务。我们可以使用串行队列代替锁去保护共享的数据。和锁不             同,一个串行队列可以保证任务在一个可预知的顺序下执行。

            serial queues通过dispatch_queue_create创建,可以使用函数dispatch_retain和dispatch_release去增加或者减少引用计数。

          

  

 

 

 一:问题描述: 取一段字符串,将其全部转换成大写 ,然后计算该字符串的长度以及替换部分字符。Demo的目的是:求得多线程技术能减少具体的运行时间是多少,展现正确使用多线程技术能极大提高代码执行效率。

 

二:问题分析: 首先要获取一段字符串,这个任务应该是最先完成的。将该字符串全部转换成大写,计算长度,替换相关位置 三个动作是互不相关的  。因此前后两者有顺序关系 应做成串行队列  ,三个动作分成并行队列。 

三:测试结果对比:

图1 (使用GCD技术)                                                                                           

 bubuko.com,布布扣

 

图2(未使用GCD)

bubuko.com,布布扣

 

 

首先将两种不同方法(多线程与非多线程)所花费的时间进行比较 :图1使用GCD技术实现Demo花费时间   :  图2使用非GCD技术实现Demo花费时间  = 1:10 。

由此一小段代码前后运行时间的恐怖差别,对多线程提高代码执行效率可见一斑。

 

 

图3(GCD)

bubuko.com,布布扣

 

注意:1,block块变量的作用域范围 

   2,分组的三个动作 处理的对象都是fetchData ,这一点必须把握清楚。并行队列里是随机执行的,因此将三个动作(转换大写,计算长度,替换字符)放在同一组当中,不见得先执行第一个 ,

   在测试Demo的时候,因为是先写的非GCD情况  当重构代码的时候 ,我并没有将两个(计算长度 替换字符)方法处理的对象从handleData(转换大写)改fetchData(数据),也就说并没有完全理解 并列队列的执行顺序  以为也会是顺序执行  三个同一级别的有两个是依赖第一个的处理结果  ,出现了逻辑上的错误。

    3,整个页面的刷新显示 ,应该是放在主线程中进行。  

 

 图4(非GCD)

bubuko.com,布布扣

 注: 基本的顺序执行。 

 

//以上内容有参照 http://objccn.io/issue-2-1/    

 

 

 

学习 iOS多线程开发 Demo示意,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!