OC开发_整理笔记——多线程之GCD
一、进程和线程
二、各种队列!
1、GCD:Grand Central Dispatch
2、串行队列(Serial)
3、并行队列(Concurrent)
4、主调度队列(main dispatch queue)
三、队列的任务处理
1、串行队列(✅DISPATCH_QUEUE_SERIAL)的同步任务和异步任务:dispatch_sync 和 dispatch_async
#串行同步执行结果:不会创建新线程,按照 顺序执行
#串行异步执行结果:创建了一个新线程,但是依然按照 顺序执行
#串行先执行异步,再执行同步的结果:发现同步一直是在主线程,但也是先让异步的执行完再来执行同步的,
从而说明一个串行队列是顺序执行的,但是也不影响主线程的操作
2、并行队列(✅DISPATCH_QUEUE_CONCURRENT)的同步任务和异步任务:dispatch_sync 和 dispatch_async
#并行同步执行结果:不会创建新线程,按照 顺序执行[同串行同步]
#并行异步执行结果:会新建多个线程、操作无序执行(有⽤,容易出错!)队列前如果有其他任务,会等待前面的任务完成之后再执⾏
场景:既不影响主线程,又不需要顺序执⾏行的操作!
#并行先执行同步,再执行异步的结果:发现同步执行完才会执行异步
#并行先执行异步,再执行同步的结果:顺序已经完全各种乱入了!
3、全局队列(DISPATCH_QUEUE_PRIORITY_DEFAULT):开发中用这个就对了dispatch_get_global_queue
#全局队列先执行同步,再执行异步的结果:实际上结果是和并列的都一样的效果
4、主线程队列:dispatch_get_main_queue[主队列中添加的同步操作永远不会被执⾏行,会死锁]
四、嵌套同步任务
1、在串行队列中嵌套多一个同步任务,会造成阻塞!!
五、小结一下
1、并行和串行的任务调度的区别