• 学习 iOS多线程开发 Demo示意


      并发所描述的概念就是同时运行多个任务。这些任务可能是以在单核 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技术)                                                                                           

     

    图2(未使用GCD)

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

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

    图3(GCD)

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

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

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

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

     图4(非GCD)

     注: 基本的顺序执行。 

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

  • 相关阅读:
    自定义cell
    微信界面
    设置字体阴影
    Xcode 7新特性Lightweight Generics 轻量级泛型与__kindof修饰符
    @synchronized 是递归锁,类似NSRecursiveLock,递归调用不会引起死锁,而NSLock是非递归锁。
    Your build settings specify a provisioning profile with the UUID, no provisioning profile was
    NSOperationQueue与GCD
    Objective-C中继承和类别的比较:category&Inherit
    iOS 事件处理机制与图像渲染过程
    [iOS]用instancetype代替id作返回类型有什么好处?(转)
  • 原文地址:https://www.cnblogs.com/ZhuXingzhi/p/3728710.html
Copyright © 2020-2023  润新知