美文网首页
GCD多线程化繁入简

GCD多线程化繁入简

作者: 雷晏 | 来源:发表于2016-09-06 17:35 被阅读61次

gcd想必大家并不陌生,知道是用来多线程的,却不知道怎么去使用。接下来,我将带领大家去一步步从零研究gcd,认识gcd,去使用gcd。

为什么要去使用gcd呢。是为了让耗时的操作分开一个子线程让其去处理,等处理完毕后再把结果返回到主线程,这样就不会使得主线程阻塞,大大增加应用友好度,用户体验。

在gcd中有一个重要的概念-队列(queue),不管是开辟主线程,还是子线程,都是一个队列,线程操作都是在队列中操作的。(个人对此的理解)

在了解gcd框架之前我们要先了解下如何去得到一个子线程队列、主线程队列。

补充:如何去开辟一个同步线程,异步线程

gcd中包括几大知识模块:

串行队列

并发队列

延时线程

线程组

定时器

信号量

串行队列

顾名思义,就是依次执行。

通过dispatch_queue_create来创建一个串行队列

输出结果:

并发队列

顾名思义,就是一起执行,没有顺序。

输出结果:

延时线程

在gcd中的延时操作相比于基于Thread的performSelector的精确度上没那么高。

输出结果:

线程组

定义上讲,就是将线程放倒一个组,可以用来监听线程执行顺序。

比如:这里有3个线程(线程1,线程2,线程3)。我想要在线程1、线程2执行完毕后再去执行线程3 。(前提:在并发队列中),就可以将3个线程放在线程组里去管理监听。

dispatch_group_notify就是拿来监听线程组的执行,当执行完毕才会去执行线程3.

输出结果:

定时器

gcd定时器精确度上不高,会有0.几的误差。

输出结果:

输出结果:

信号量

dispatch_semaphore_signal是发送一个信号,自然会让信号总量加1,dispatch_semaphore_wait等待信号,当信号总量少于0的时候就会一直等待,否则就可以正常的执行,并让信号总量-1,根据这样的原理,我们便可以快速的创建一个并发控制来同步任务和有限资源访问控制。

简单地概括:在多个子线程中,想要你固执控制这些子线程的操作顺序,可以通过信号量这个来处理。

比如:这里有2个子线程(并发队列),我想要线程1执行完毕后才让线程2去执行,就可以通过信号量在线程1执行完毕的时候发出一个信号,在线程2中通过信号量阻塞线程2,只有当接受到线程1发出的信号才执行。

输出结果:

补充:通过dispatch_once,实现闭包中的代码只执行一次.

gcd封装框架demo github

总结:合理运用gcd的知识,可以使得你的程序更加流畅。

相关文章

  • GCD多线程化繁入简

    gcd想必大家并不陌生,知道是用来多线程的,却不知道怎么去使用。接下来,我将带领大家去一步步从零研究gcd,认识g...

  • 化繁入简志

    写作的冲动和梦想一直都有,说干就干的决心与信心从来都不足,今天既是2021年的情人节,又是我信心与决心倍增的一天,...

  • 7.3 多线程-GCD

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

  • iOS多线程:【GCD】】详尽总结

    此篇文章只是自学照别人抄的 iOS多线程:『GCD』详尽总结 - 简书 1.GCD简介 什么是GCD GCD是 A...

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

    本文转载自:行走的少年郎的简书:iOS多线程:『GCD』详尽总结 本文用来介绍 iOS 多线程中 GCD 的相关知...

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

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

  • 心得体会

    由简入繁 有繁入简 更具体 抑扬 铺垫 几种循环利用

  • 向往的生活,化繁入简

    可能是性格所致,我对综艺节目一概免疫。像是《快乐大本营》,《跑男》,《中国好声音》这些曾经红极一时的节目,我都没有...

  • iOS面试之多线程模块

    多线程 多线程内容如下: GCD NSOperation NSThread 多线程与锁 1.GCD 同步/异步和串...

  • iOS 多线程

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

网友评论

      本文标题:GCD多线程化繁入简

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