美文网首页
iOS 多线程(GCD)

iOS 多线程(GCD)

作者: 明T_Tve灬䒚 | 来源:发表于2017-04-01 09:55 被阅读34次

多线程(GCD) 全称:Grand Center Dispatch (抽象层次:高)

GCD是纯C语言,可想而知的执行速度是很高的。在程序中可以直接调用,不需要导入libdispatch.dylib这个库,系统库中已经包含这个库,当程序执行的过程中会动态加载。GCD编程的核心就是dispatch队列,程序将在该队列中执行任务。

主线程串行队列:dispatch_get_main_queue()

先区分同步(dispatch_sync)和异步(dispatch_async)执行的任务。dispatch_sync同步执行任务函数,不会开启新的线程,dispatch_async 异步执行任务函数,会开启新的线程。再区分串行和并行。串行是一个任务接着一个任务依次按照某一种特定的顺序执行下去,例如,起床-->洗漱-->上班-->下班-->睡觉。并行是两个或两个以上的程序并发执行,例如,喝咖啡-->看书-->听音乐。

dispatch_queue_t mainQueue = dispatch_get_main_queue();

主线程串行队列同步执行任务,程序一直处于等待状态,block中的代码将执行不到,故会发生死锁。

同步

较上图比较,异步执行任务,不发生等待主线程而死锁。

异步

主线程串行队列由系统默认生成的,不可以调用dispatch_resume()和dispatch_suspend()控制程序执行。

全局并发队列:dispatch_get_global_queue()(可以设置优先级)

dispatch_queue_t  globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

在执行耗时的操作,比如读取网络数据、IO、数据库读写等,我们会在另外一个线程中处理这些操作,然后通知主线程更新界面。但是全局并发队列同步执行任务,在主线程执行会导致页面卡顿,异步不存在这样的问题。同主线程不能调用dispatch_resume()和dispatch_suspend()控制程序执行。

自定义队列:dispatch_queue_create()(可以为串行,也可以为并发)

(串行)dispatch_queue_t serialQueue = dispatch_queue_create("com.dullgrass.serialQueue", DISPATCH_QUEUE_SERIAL);

嵌套执行同步任务,程序发生死锁类似主线程嵌套同步执行。

(并行)dispatch_queue_t conCurrentQueue =  dispatch_queue_create("com.dullgrass.conCurrentQueue", DISPATCH_QUEUE_CONCURRENT);

嵌套并发执行同步任务,程序不会发生死锁。

队列组:dispatch_group_create()(通过dispatch_group_notify,可以直接监听组里所有线程完成情况)

优点:是 Apple 开发的一个多核编程的解决方法,简单易用,效率高,速度快,基于C语言,更底层更高效,并且不是Cocoa框架的一部分,自动管理线程生命周期(创建线程、调度任务、销毁线程)。

缺点: 使用GCD的场景如果很复杂,就有非常大的可能遇到死锁问题。

相关文章

  • iOS多线程:『GCD』详尽总结

    iOS多线程:『GCD』详尽总结 iOS多线程:『GCD』详尽总结

  • iOS多线程(一)-GCD

    iOS多线程-GCD

  • iOS多线程相关面试题

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • 多线程之--NSOperation

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • iOS多线程之--NSThread

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • [iOS 多线程] iOS多线程-GCD

    iOS多线程-GCD GCD的简介 GCD,全称为 Grand Central Dispatch ,是iOS用来管...

  • iOS 多线程

    iOS 多线程有几种方式 GCD NSOpeartion NSThread phread 多线程 GCD disp...

  • GCD练习

    GCD练习 ios 多线程 GCD : ios 多线程 全剧队列,异步执行 线程间通信 信号量 文件锁 单利模式 ...

  • iOS开发多线程之GCD

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 GCD...

  • iOS 多线程

    参考链接 iOS多线程iOS 多线程:『GCD』详尽总结iOS简单优雅的实现复杂情况下的串行需求(各种锁、GCD ...

网友评论

      本文标题:iOS 多线程(GCD)

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