同步、异步、并发、串行
/*
同步:在当前线程中执行
异步:在另一条线程中操作,开启了新线程
并发:让多个线程任务同时执行
串行:让任务一个接一个的执行
*/
/**
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原则:先进先出,后进后出
*/