博客> 多线程技术之五GCD
多线程技术之五GCD
2019-05-21 23:00 评论:2 阅读:1295 Iven_Ma
ios 多线程

1.认识CGD 2.Dispatch Queue 3.Dispatch Group 4.GCD常用方法

1.GCD简介 GCD 是 Grand Center Dispatch的简称,直译为调度中心,他是基于C语言的。如果使用GCD,完全由系统管理线程,我们不需要编写线程代码。GCD会负责创建线程和调度你的任务,系统直接提供线程管理。

2.GCD的优势 易用:GCD比之NSThread好用,程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码。 效率:GCD会自动利用更多的cpu内核。GCD被实现的如此轻量和优雅,使得他在很多地方比之专门创建消耗资源的线程更加实用和快速。这同时关系到易用性,导致GCD易用的原因有一部分是你可以不用担心太多的效率问题而仅仅使用它就行。 性能:GCD会自动管理线程的生命周期(创建线程,调度任务,销毁线程)。GCD自动根据系统负载来增减线程数量,这就减少了上下文切换以及增加了计算效率。

3.GCD中有两个核心概念 (1)队列:用来存放任务 核心理念:将长期运行的任务分解为多个单元,并将这些单元添加到dispatch queue中,系统会为我们管理这些dispitch queue,为我们在多线程上执行工作单元,我们不需要直接启动和管理后台线程。 我们把各种任务提交给队列,队列根据他本身的类型以及当前系统的状态,添加到不同的线程中执行任务。线程的创建和管理都有GCD本身参与,不需要我们参与。 (2)任务:执行什么操作

4.GCD使用的两个步骤 (1)定制队列 (2)提交任务,确定想做的事情 5.dispatch queue类型 并行队列:可以让多个任务并发(同时)执行(自动开启多线程执行任务),并发功能只有在异步函数(dispatch_async)下有效。 串行队列:让任务一个接一个地执行,(一个任务执行完毕,在执行下个任务)所有线程串行,或者只有一个线程,任务依次执行。  屏幕快照 2016-03-31 下午4.51.11.png

6.dispatch使用

 屏幕快照 2016-03-31 下午4.52.16.png

7.GCD任务提交 (1)用同步的方式执行任务 dispatch_sync(dispatch_queue_t queue ,dispatch_block_t block); (2)用异步的方式执行任务 dispatch_async(dispatch_queue_t queue, dispatch_block_t,block);

8.死锁 在一个串行队列执行代码里,如果向此队列同步提交一个任务,会造成死锁。为了避免死锁的情况,要求我们避免在串行队列中同步提交任务给本身的队列。

9.队列的暂停与继续 (1).我们可以使用dispatch_suspend函数暂停一个queue以阻止他执行block对象;使用dispatch_resume可以继续dispatch queue。挂起和继续是异步的,而且只在执行block之间(比如执行一个block之前或者之后)生效。挂起一个queue不会导致正在执行的block停止。 (2)必须保证两个函数同时存在

10.dispatch group 就像我们在NSOperation中添加依赖一样,如果我们一个任务需要等待其他任务完成才能执行,我们使用dispatch group是最轻松的方法。 dispatch group提供了时间延迟的方法。

 屏幕快照 2016-03-31 下午8.18.16.png  屏幕快照 2016-03-31 下午8.18.53.png 11.GCD常用方法 (1)延迟执行  屏幕快照 2016-03-31 下午8.20.14.png (2)使用dispatch_once一次性代码 使用此函数可以保证某段代码在程序运行过程中只执行一次  屏幕快照 2016-03-31 下午8.20.25.png

收藏
0
sina weixin mail 回到顶部