一.队列
原则:队列先进先出原则
1.串行队列
串行队列:放到该队列上的任务,在子线程中串行执行
dispatch_queue_create 创建串行队列
参数1:队列的标示,一般是公司域名倒写
参数2:队列的类型,NULL代表串行队列,DISPATCH_QUEUE_SERIAL代表串行队列 DISPATCH_QUEUE_CONCURRENT代表并行队列
dispatch_queue_t serailQueue= dispatch_queue_create("com.queue.serialQueue", DISPATCH_QUEUE_SERIAL);
①串行队列 同步任务
特点:有顺序执行,不开辟线程
应用场景:FMDB,同步任务,保证数据安全
②串行队列 异步任务
特点:有顺序执行,并且在开辟的线程中执行,并且之开辟一条线程!
应用场景:耗时操作,有严格操作顺序,比如付费网站下载图片(登录->付费->下载)
2.并发队列
并发队列,必须自己写,不能写NULL
dispatch_queue_t concurrentQueue= dispatch_queue_create("com.queue.concurrentQueue", DISPATCH_QUEUE_CONCURRENT);
①并发队列,同步任务
特点:没有开辟新线程,同时是按照顺序
应用场景:开发中几乎不用
②并发队列,异步任务
特点:会开线程,开N条,表示不固定,因为我们的线程循环利用的功能 没有顺序.
应用场景:比如下载多部片
3.全局队列和并发队列,执行效果一样,只是说,并发队列,需要我们程序员,自己创建,而全局队列,是由于系统提供
特点:任务可以同时执行,这样可以提高程序的运行效率.
①全局队列,同步任务
特点:没有开辟新线程,同时是按照顺序
应用场景:开发中几乎不用
②全局队列,异步任务
特点:会开线程,开N条,表示不固定,因为我们的线程循环利用的功能 没有顺序.
应用场景:比如下载多部片
4.主队列
特点:它永远在主线程工作,这个是苹果给开发人员提供回到主线程做事的一种机制
①主队列,同步任务 特点:主队列,只有在主线程空闲的时候,才能调度里面的任务 造成死锁
②主队列,异步任务 应用场景:回到主线程做事,一般是做和UI相关的工作.
总结:任务的优先级比队列优先级高,所以我们在队列和任务的各种组合的时候,首先要看我们的任务.
开不开线程,由任务决定
⭕️异步才有开辟线程的能力,同步没有开辟线程的能力
⭕️异步是在其它线程上执行,同步是在当前线程上执行