美文网首页HTML5 专栏程序员
iOS OS X 和 iOS 中的多线程技术-4 (GCD)

iOS OS X 和 iOS 中的多线程技术-4 (GCD)

作者: 石虎132 | 来源:发表于2017-12-03 15:30 被阅读126次

    //联系人:石虎QQ:1224614774昵称:嗡嘛呢叭咪哄

    一、GCD

    GCD(Grand Central Dispatch)是 Apple 公司为了提高 OS X 和 iOS 系统在多核处理器上运行并行代码的能力而开发的一系列相关技术,它提供了对线程的高级抽象。GCD 是一整套技术,包含了语言级别的新功能,运行时库,系统级别的优化,这些一起为并发代码的执行提供了系统级别的广泛优化。所以,GCD 也是 Apple 推荐的多线程编程工具。

    GCD 是系统层面的技术,除了可以被系统级应用使用,也可以被更普通的高级应用使用。使用 GCD 之后,应用就可以轻松地在多核系统上高效运行并发代码,而不用考虑繁琐的底层问题。GCD 在系统层面工作,能很好地满足所有应用的并行运行需求,将可用系统资源平衡地分配给它们。

    GCD 提供了一套纯 C API。但是,它提供的 API 简单易用并且有功能强大的任务管理和多线程编程能力。GCD 需要和 blocks(Objective-C 的闭包)配合使用。block 是 GCD 执行单元。GCD 的任务需要被拆解到 block 中。block 被排入 GCD 的分发队列,GCD 会为你排期运行。GCD 创建,重用,销毁线程,基于系统资源以它认为合适的方式运行每个队列。所以,用户需要关心的细节并不多。

    GCD 的使用也很简单,假设抢面包是个耗时操作,前面例子中的 Geroge 和 Totty 的工作都可以实现如下:

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

    // 并发队列中做耗时操作

    while(TRUE) {

    if(_cake >0) {

    // 耗时操作

    [NSThread sleepForTimeInterval:0.5];

    _cake--;

    _occupied = kSum - _cake;

    }else{

    break;

    }

    }

    // 主队列中刷新界面

    dispatch_async(dispatch_get_main_queue(), ^{

    [selfupdateUI];

    });

    });

    谢谢!!!

    相关文章

      网友评论

        本文标题:iOS OS X 和 iOS 中的多线程技术-4 (GCD)

        本文链接:https://www.haomeiwen.com/subject/wowabxtx.html