美文网首页
队列(一)

队列(一)

作者: fuchina | 来源:发表于2018-05-23 20:04 被阅读0次

结论:

只要是异步添加任务,不管是并行队列还是串行队列,任务都是在新线程中执行;但在主队列里时不开启新线程;

只要是同步添加任务,不管是并行队列还是串行队列,任务都是在当前线程执行;

同步与异步只是要不要阻塞当前线程;

----------------------------------------------------------------------------------

队列用来管理任务被执行的线程,遵循FIFO原则(先进先出),FIFO原则用来理解同步死锁时非常重要;

队列分串行和并行两种;

将任务加入队列有同步和异步两种方式,同步是会阻塞当前线程,异步不阻塞当前线程;

异步执行肯定不会导致死锁;

只有一种情况会死锁:同一个串行队列Q里往该队列Q同步添加任务,会死锁

不管是同步还是异步,将任务添加进队列都是按照FIFO添加到后面,但在并行队列中,不确定谁先执行完;

死锁举例

队列死锁:相对于线程死锁,队列死锁的概念也是存在的(队列根据一些锁来保证线程执行任务时的顺序,出现线程锁,应该本质还是线程锁),在同步串行队列中,如果当前队列与同步的任务队列是同一个,当同步添加任务后,将任务添加到主队列的最后面,并且阻塞主线程,等待任务2执行,但根据队列的FIFO原则,click方法(任务)还没执行完,并且在任务2之前,这样click等待任务2执行完,而任务2又等待click方法执行完,就造成了死锁。

有一些半桶水资料,将死锁解释为任务3排在任务2前面,这是因为不懂而乱说。

同步+串行队列:在当前线程执行(没必要新建线程),如果当前队列是任务所在的队列,会造成队列死锁

同步+串行

这个执行顺序是:1,isMain:1,2,3;

click在主队列中,跟concurrentQueue不是同一个队列,所以不会死锁。

同步+并行队列:在当前线程执行(没必要新建线程),如下所示

同步+并行

异步+并行队列:在新线程中执行任务

异步+并行

异步+串行队列:

异步+串行

由此可见:

只要是异步添加任务,不管是并行队列还是串行队列,任务都是在新线程中执行;但在主队列里时不开启新线程;

只要是同步添加任务,不管是并行队列还是串行队列,任务都是在当前线程执行;

同步与异步只是要不要阻塞当前线程;

因为同步会阻塞,所以同步+并行队列结果也成为了一个串行,因为sync会获得本次任务的结果才会执行下次结果,就会体现不出并发性。

异步+并行队列:根据GCD线程池情况而定,如果线程数小于任务数,可能某个任务要等其他任务完成再获得线程来执行。

相关文章

  • 队列

    文章结构 什么是队列 实现队列顺序队列链式队列循环队列 Java中的队列 1. 什么是队列 队列也是一种操作受限的...

  • 队列,异步,同步,线程通俗理解

    一、队列 串行队列 并行队列 主队列(只在主线程执行的串行队列) 全局队列(系统的并行队列) 二、 任务(是否具有...

  • GCD

    获得主队列 获得全局队列 串行队列 异步队列 同步队列 阻隔队列 (像栅栏一样 ) 例如 A -->栅栏 --...

  • GCD

    一.队列 全局队列:dispatch_get_global_queue(),全局队列是并发队列,添加进这个队列的任...

  • 数据结构与算法之队列(五)

    目录 队列简介队列的接口设计用栈实现队列双端队列实现循环队列实现循环双端队列 一 简介 队列是一种特殊的线性表,只...

  • 队列

    队列特性 对比队列和栈 基于数组的队列 对比队列学习循环队列 循环队列难点 阻塞队列 并发队列 应用:线程池中拒绝...

  • GCD的基础使用总结(一)

    一.队列创建 1.系统创建的队列 -> (主队列、全局队列) 1.主队列 //一个默认的与主线程绑定的队列,称之为...

  • 36_队列的概念及实现(上)

    关键词:队列的定义、队列的特性、队列的操作、队列的继承、StaticQueue 0. 队列的定义 队列是一种特殊的...

  • 阻塞队列和线程池原理

    队列 说阻塞队列之前先要明白什么是队列?队列是一种特殊的线性表,在队列中插入一个队列元素称为入队,从队列中删除一个...

  • GCD相关知识总结

    一:GCD的队列简介 GCD的Queue有三大队列类型:主队列(main)、全局队列(global)、用户队列(c...

网友评论

      本文标题:队列(一)

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