多线程之GCD概述

2019-02-28  本文已影响0人  梦里桃花舞倾城

1.GCD简介

它是苹果推出的一套多线程解决方案,会合理的利用CPU、自动管理线程的生命周期。使用时只需要在block中写入需要执行的代码即可。非常灵活!

GCD的源码libdispatch版本很多,源代码风格各版本都有不同,但大体逻辑没有太大变化。libdispatch的源码下载地址在这里

为什么要用GCD

2.GCD任务和队列

任务:

就是你需要执行的操作(即block代码块里面的内容)。执行任务有两种方式:同步执行异步执行

举个简单例子:你要打电话给小明和小白。

同步执行就是:你打电话给小明的时候,不能同时打给小白,等到给小明打完了,才能打给小白(等待任务执行结束),而且只能用当前的电话(不具备开启新线程的能力)。
而异步执行就是:你打电话给小明的时候,不需要等和小明通话结束,还能直接给小白打电话,不用等着和小明通话结束再打(不用等待任务执行结束)。除了当前电话,你还可以使用其他所能使用的电话(具备开启新线程的能力)。

注意:异步执行(async)虽然具有开启新线程的能力,但是并不一定开启新线程。这跟任务所指定的队列类型有关(下面会讲)。

队列(Dispatch Queue): 用来存放任务,调度任务。队列是一种特殊的线性表,采用FIFO(先进先出)的原则,即新任务总是被插入到任务的末尾,而读取任务总是从队列的头部开始读取。每读取一个任务,则从队列中释放一个任务。

GCD中有两种队列:串行队列并发队列。两者都符合 FIFO(先进先出)的原则。两者的主要区别是:执行顺序不同,以及开启线程数不同。

注意:并发队列的并发功能只有在异步函数(dispatch_async)下才有效

两者主要区别如下图所示:

串行队列.png
并发队列.png
总结:

原文链接

上一篇下一篇

猜你喜欢

热点阅读