在iOS开发中经常会用到GCD,如果你在求职过程中GCD的使用也是面试官必问的,那么今天就来说说GCD的有关内容,不喜勿喷。
iOS开发交流技术群:563513413,不管你是大牛还是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!
一、GCD的概念
1.GCD全称是Grand Central Dispatch,可译为“CPU的中枢调度器”,是C语言,提供了非常多的强大的函数
2.GCD的优势:GCD是苹果公司为多核的并行运算提出的解决方案,它会自动利用更多的CPU内核(比如四核),而且它会自动管理线程的生命周期(创建线程、调度任务、销毁线程),开发者只需告诉GCD想要执行什么任务,不需编写任何线程管理代码。
二、GCD的核心
GCD的两个核心内容:任务和队列。
1.任务:执行什么样的操作;
2.队列:拿来存放任务。
三、GCD中执行任务的函数
1、同步函数:用同步的方式执行任务
dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);
2、异步函数:用异步的方式执行任务
dispatch_async(dispatch_queue_t queue, dispatch_block_t block)
同步和异步的区别:
同步:在当前线程中执行
异步:在另一条线程中执行
四、GCD相关内容
1.GCD中有4个术语比较容易混淆:同步、异步、并发、串行
2.同步和异步二者的主要影响:能否开启新的线程;
同步:在当前线程中执行任务,不具备开启新线程的能力
异步:在新的线程中执行任务,具备开启新线程的能力
3.并发和串行二者的主要影响:任务的执行方式
并发:多个任务并发(同时)执行
串行:一个任务执行完毕后,再执行下一个任务
注意:同步函数+主队列 == 死锁(会卡死)
(值得注意的是,同步任务有一个特性是,只要一添加到队列中就要立马执行,主队列中永远就只有一条线程——主线程,此时主线程在等待着主队列调度同步任务,而主队列发现主线程上还有任务未执行完,就不会让同步任务添加到主线程上,由此就造成了互相等待(主队列在等待主线程执行完已有的任务,而主线程又在等待主队列调度同步任务,此时就造成所谓的死锁了。)
五、创建(获取)队列的方式
1、串行队列:
(1). 使用dispatch_queue_create函数创建串行队列
dispatch_queue_t queue =dispatch_queue_create("Lotheve", NULL);
//参数分别为队列名称、队列属性(一般用NULL即可)
(2).获取主队列(主队列是一种特殊的串行队列,放在主队列中的任务,都会放到主线程中执行)
dispatch_queue_t queue = dispatch_get_main_queue();
2、并发队列:
使用dispatch_get_global_queue函数获得全局并发队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
第一个参数分别为全局队列优先级,进程中存在3个全局队列:低、中(默认)、高三个优先级队列,这里选择默认的。第二个参数暂时无用,用0即可。
结论:今天的分享到这就结束了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。