GCD的理论

同步、异步、并发、串行


/*

同步:在当前线程中执行

异步:在另一条线程中操作,开启了新线程

并发:让多个线程任务同时执行

串行:让任务一个接一个的执行

*/

/**

GCD:Grand Center Dispatch --宏大的中央调度(牛逼的中枢调度器)

纯C语言,提供了非常多强大的函数

1苹果公司为多核的并行运算提出的解决方案

2可以利用更多的处理核心

3不用关心线程代码,gcd会创建线程代码,调度任务

优势:自动管理线程的生命周期(创建线程、调度任务、销毁线程)

程序员只需要告诉GCD我们想要执行什么任务,不需要编写任何线程管理代码

GCD中有2个核心概念

(1)任务:执行什么操作---block

(2)队列:用来存放任务---queue

同步:在当前线程中执行

异步:在另一条线程中执行

GCD的队列分为2大类型:

并发队列:可以让多个任务并发(同时)执行--并发功能只有在异步函数下才有效

串行队列:任务一个接一个地执行(一个任务执行完毕再执行下一个任务)

有四个属于比较容易混淆:同步、异步、并发、串行

1.同步和异步决定了要不要开启新的线程:

同步:在当前线程中执行任务,不具备开启线程的能力

异步:在新的线程中执行任务,具备开启新线程的能力

2.并发和串行决定了任务的执行方式:

并发:多个任务并发(同时)执行

串行:一个任务执行完毕后,再执行下一个任务

GCD中有两个执行任务的函数:

1.用同步方式执行任务:dispatch_sync

2.用异步方式执行任务:dispatch_async

GCD中获得串行队列有两种途径:

1.使用dispatch_queue_create函数创建串行队列//两个参数:1.队列名称2.队列属性,一般用NULL即可

2.dispatch_get_main_queue --使用主队列(和主线程相关的队列)--主队列是GCD自带的一种特殊的串行队列,放在主队列中的任务,都会放到主线程中执行

使用dispatch_get_main_queue()获得主队列

GCD中获得并发队列有两种途径:

GCD默认已经提供了全局的并发队列,供整个应用使用,不需要手动创建

使用dispatch_get_global_queue函数获得全局的并发队列

各种队列执行效果

全局并发队列手动创建,串行队列主队列

同步(sync)没有开启新线程

串行执行任务

异步(async)有开启新线程

并发执行任务

GCD的使用就2个步骤

(1)定制任务

(2)确定想做的事情

将任务添加到队列中,GCD会自动将队列中的任务取出,放到对应的线程中执行

提示:任务的取出遵循队列的FIFO原则:先进先出,后进后出

*/

你可能感兴趣的:(GCD的理论)