GCD理解

作者: Ryan_RH | 来源:发表于2017-03-02 14:15 被阅读0次

Dispatch Queues的生成可以有这几种方式:

1. dispatch_queue_t queue = dispatch_queue_create("serial", DISPATCH_QUEUE_SERIAL);//生成一个串行队列,队列中的block按照先进先出(FIFO)的顺序去执行,实际上为单线程执行。第一个参数是队列的名称,在调试程序时会非常有用,所有尽量不要重名了。

2. dispatch_queue_t queue = dispatch_queue_create("concurrent", DISPATCH_QUEUE_CONCURRENT);//生成一个并发执行队列,block被分发到多个线程去执行

3. dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);//获得程序进程缺省产生的并发队列,可设定优先级来选择高、中、低三个优先级队列。由于是系统默认生成的,所以无法调用dispatch_resume()和dispatch_suspend()来控制执行继续或中断。需要注意的是,三个队列不代表三个线程,可能会有更多的线程。并发队列可以根据实际情况来自动产生合理的线程数,也可理解为dispatch队列实现了一个线程池的管理,对于程序逻辑是透明的。

官网文档解释说共有三个并发队列,但实际还有一个更低优先级的队列,设置优先级为DISPATCH_QUEUE_PRIORITY_BACKGROUND。Xcode调试时可以观察到正在使用的各个dispatch队列。

4. dispatch_queue_t queue = dispatch_get_main_queue();//获得主线程的dispatch队列,实际是一个串行队列。同样无法控制主线程dispatch队列的执行继续或中断。


接下来我们可以使用dispatch_asyncdispatch_sync函数来加载需要运行的block。

dispatch_async(queue, ^{

//block具体代码

});//异步执行block,函数立即返回

dispatch_sync(queue, ^{

//block具体代码

});//同步执行block,函数不返回,一直等到block执行完毕。编译器会根据实际情况优化代码,所以有时候你会发现block其实还在当前线程上执行,并没用产生新线程。

相关文章

  • GCD相关知识点

    GCD相关知识点 多线程技术--GCD 深入学习GCD GCD 深入理解:第一部分 GCD 深入理解:第二部分 1...

  • 多线程系列文章

    GCD基础篇 - 同步、异步,并发、并行的理解 GCD中级篇 - dispatch_group的理解及使用 dis...

  • GCD理解

    Dispatch Queues的生成可以有这几种方式: 1.dispatch_queue_tqueue=dispa...

  • 理解GCD

    (1)博客:深入理解GCD 理解iOS中的线程池 多线程理解 ?:(1)信号量--...

  • 面试问题总结

    Runtime理解。 Runloop理解,结合计时器。 GCD常用的方法。 GCD的原理。 KVO和KVC的实现原...

  • GCD 深入理解:第一部分

    GCD 深入理解:第一部分 什么是 GCD GCD 是 libdispatch 的市场名称,而 libdispat...

  • iOS笔记--GCD相关知识

    GCD相关知识 1.GCD(Grand Central Dispatch)教程 2.GCD 深入理解:第一部分 备...

  • GCD之基础

    深入理解 GCD(一) - 博客 - 伯乐在线

  • GCD深入理解学习笔记

    GCD 深入理解第一部分 GCD 深入理解第二部分 如何使用 NSOperations 和 NSOperation...

  • (链接)GCD

    一 通过GCD中的dispatch_barrier_(a)sync所谓等待的理解 二 iOS-GCD之初,disP...

网友评论

      本文标题:GCD理解

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