美文网首页
iOS多任务核心GCD-分派队列

iOS多任务核心GCD-分派队列

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

  GCD(Grand Central Dispatch)是iOS多任务的核心,广泛应用在iOS编程或者系统层面的各个方面。GCD是非常底层的框架,比操作队列更底层。GCD严格遵守先进先出(FIFO)结构,所以是无法在队列中使用优先级或者调整次序。

  首先最重要的一点,分派队列是队列,而不是线程。队列是组织块的,调用dispatch_async不会让块执行,只是把块添加到队列中。GCD中队列是有层级的,事实上只有全局系统队列会被调度运行,访问方法是:dispatch_get_global_queue,以及下面优先级常量中的一个:

DISPATCH_QUEUE_PRIORITY_HIGH

DISPATCH_QUEUE_PRIORITY_DEFAULT

DISPATCH_QUEUE_PRIORITY_LOW

DISPATCH_QUEUE_PRIORITY_BACKGROUND

  这些队列都是并行的,GCD会根据可用线程尽可能按优先级调度队列。当我们创建队列时,队列会附加到某一个全局队列。默认情况下会附加到默认优先级队列上。当块到达头部时,实际上会移动目标队列的末尾。当到达全局队列的头部时就会执行。块被添加后,就会按照顺序运行,无法取消,也无法改变相对于队列中其他块的顺序。但是如果想让高优先级块插队呢?如下代码。创建两个队列,一个高优先级和一个低优先级,使高优先级队列是低优先级队列的目标队列:

dispatch_queue_t low = dispatch_queue_create("low",DISPATCH_QUEUE_SERIAL);

dispatch_queue_t high = dispatch_queue_create("high",DISPATCH_QUEUE_SERIAL);

dispatch_set_target_queue(low,high);

  通常是分派到低优先级队列:

dispatch_async(low,^{/ 低优先级块 /});

  要分派到高优先级队列,暂停低优先级队列,并且在高优先级块结束后恢复低优先级队列:

dispatch_suspend(low);

dispatch_async(high,^{

/ 高优先级块 /

dispatch_resume(low);

});

  暂停队列会组织调度开始就处于其中的任何块,还有人和以暂停队列为目标队列的队列。这样不会停止正在执行的块,但是就算低优先级块是CPU执行的下个目标,也不会被调度,直到resume。suspend和resume必需配对出现。

相关文章

  • iOS多任务核心GCD-分派队列

    GCD(Grand Central Dispatch)是iOS多任务的核心,广泛应用在iOS编程或者系统层面的各...

  • GCD-分派源

    分派源提供了高效的方式来处理事件,这种方式是通过发送通知,接受通知的方式实现; 但有的时候系统发送通知有延迟:已经...

  • 06 GCD 并发队列

    03 GCD-并发队列 并发队列,异步执行 问题:1.会开几条线程?会开多条线程,线程数量是由GCD来决定2.会顺...

  • 聊聊 GCD

    什么是 GCD GCD (Grand Central Dispatch) 是 iOS 多任务的核心。在 Mac O...

  • GCD-队列组

    //创建队列 dispatch_queue_t queen = dispatch_get_global_queue...

  • GCD-队列组

    1.队列组的基本概念 1.队列组(dispatch_group_t):用来管理队列中任务的执行。2.队列组的使用步...

  • redis-1

    redis-1 redis的IO模型 4大核心组建 多路复用 套接字队列 事件分派器 事件处理器 (请求处理器、连...

  • 7.3 多线程-GCD

    多线程-GCD 多线程-GCD-串行并行 多线程-GCD.png GCD-线程的通讯、延时操作、定时器 GCD-线...

  • iOS多线程学习笔记(二)

    iOS多线程中的GCDGCD的核心: 任务:执行什么操作 队列:用来存放任务将任务添加到队列中,GCD会自动将队列...

  • iOS-底层(16):GCD-函数与队列

    GCD 全称是 Grand Central Dispatch 纯C语言,提供了非常多的强大函数 GCD优势 GCD...

网友评论

      本文标题:iOS多任务核心GCD-分派队列

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