在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即可。
论断:明天的分享到这就完结了。
发表回复