iOS,GCD之同步,异步,串行,并行队列,主队列总结

原创纯文字的,但绝对是能解释你所有疑问的!(有一点基础的来看吧),鉴于网上很多总结都是现象,很少解释出根本原因,即使说了的原因,说出来的原因有的不太对,所以发表这篇文章.

同步执行新任务:中断当前任务,立即执行新任务.

异步执行新任务:不中断当前任务,等待执行新任务.


串行队列:任务逐一执行,先进先出.

并行队列:任务并发执行,但也遵循着先进先出.

主队列:系统创建的一个串行队列而已,网上其他文章说的很特别,甚至单独搞个表格来说明它的不同,有点更加无法让人深入理解.


是否创建新线程?

首先要搞清为什么会创建新线程:同一线程,同一时间,只能执行一个任务.所以只要是想在同一时间执行多个任务,就需要创建新线程.(单线程也能执行多任务,但是是伪执行,按上述理解就行)

所以:是否创建新线程不能由是否是异步决定,但绝不会违反上述原则,理解上述原则,则能知道什么时候会创建新线程,请看具体剖析


剖析开始!


首先得记住:

创建队列,同步,异步也好,这些代码操作本身就属于某个队列的某个任务中的部分.为了方便理解,你可以将以下这些操作当成是  : 主队列+任务A


主队列+任务A中  创建串行队列+同步新任务B,C,D:

1.新任务会中断A任务立即执行,因为是同步

2.新任务BCD会一个一个有序的执行.因为是同步而不是因为串行.(不能理解就仔细看上一条1)

3.不会创建新线程.因为这种情况只会在同一时间执行一个任务.完全没有必要创建新线程

4.感兴趣的可以试试,在同步的B任务中再同步个E任务到这个串行队列.会怎么样? 咳咳.会死锁.看懂的自然就理解了.


主队列+任务A中 创建串行队列+异步新任务B,C,D:

1.新任务不会中断A任务,而是等待A结束后再执行,因为是异步

2.新任务BCD会一个一个有序的执行.因为是串行.

3.会创建新线程吗? 

会:

因为主队列的线程还可能要执行其他的任务(虽然是A结束了,但不代表主队列后面没有其他任务),这个新串行队列的任务自然需要新的线程了

但是即使你异步100个任务也只会创建一条线程:

新队列是串行队列,所以只需一条线程,看懂的应该明白主队列+异步为什么不会创建新线程了


主队列+任务A中 创建并行队列+同步新任务B,C,D:

1.新任务会中断A任务立即执行,因为是同步

2.新任务BCD会一个一个有序的执行,但是是因为同步的原因.

3.会创建新线程吗?不想写了, 肯定是不会啊,你给他一个需要创建新线程的理由.


主队列+任务A中 创建并行队列+异步新任务B,C,D:

1.新任务不会中断A任务,而是等待执行,因为是异步

2.新任务BCD会并发执行,因为是并行+异步.(仔细理解一下吧,缺一不可,并行队列中有多个任务的时候才会发生并发,之前的情况,并行队列中只会有一个任务,)

3.会创建新线程.而且是多个,但不会是无限制的创建(保护机制,操作系统机制)


主队列+任务A中 同步新任务B,C,D:

1,新任务会中断A任务立即执行,因为是同步

2,新任务BCD会等待A执行完毕后再执行,因为是主队列是串行

3.1和2冲突了呢.看到了吗?这就是死锁


主队列+任务A中 异步新任务B,C,D:

1.新任务不会中断A任务,而是等待执行,因为是异步

2.新任务BCD会一个一个有序的执行.因为主队列是串行.

3.会创建线程吗?没有创建的理由

4.主队列在多线程层面毫无特别之处.这和 下面某些情况是一模一样的


以上理解了 来点复杂的吧


主队列+任务A中 创建串行队列+同步新任务B,C  然后B中同步任务D,E到创建队列.(会死锁)

主队列+任务A中 创建串行队列+同步新任务B,C  然后B中异步任务D,E到创建队列.

主队列+任务A中 创建串行队列+异步新任务B,C  然后B中同步任务D,E到创建队列.(会死锁)

主队列+任务A中 创建串行队列+异步新任务B,C  然后B中异步任务D,E到创建队列.

主队列+任务A中 创建并行队列+同步新任务B,C  然后B中异步任务D,E到创建队列.

主队列+任务A中 创建并行队列+同步新任务B,C  然后B中同步任务D,E到创建队列.

主队列+任务A中 创建并行队列+异步新任务B,C  然后B中异步任务D,E到创建队列.

主队列+任务A中 创建并行队列+异步新任务B,C  然后B中同步任务D,E到创建队列.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,561评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,218评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,162评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,470评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,550评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,806评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,951评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,712评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,166评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,510评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,643评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,306评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,930评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,745评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,983评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,351评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,509评论 2 348

推荐阅读更多精彩内容