码迷,mamicode.com
首页 > 移动开发 > 详细

iOS多线程之5.GCD的基本使用

时间:2016-10-31 21:23:56      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:理解   text   更新   fill   自己   alt   相等   函数   style   

  上一篇文章我对GCD的几个基本概念做了介绍,但是大家看完了可能觉得对理解GCD并没有什么卵用。其实会用GCD其实很简单,只要记住两条就可以了。

1.  主队列里的任务必须在异步函数中执行。

  主队列里的任务如果在同步函数中执行,就会造成死锁。什么是死锁?容我举例来说明。

 

技术分享

技术分享

  看到没有,主队列里的任务没有执行,程序也没有往下执行,这就叫做死锁。那又为什么会发生死锁。主队列里的任务默认都在主线程中执行,程序都把主队列里的任务放在主线程的最后面。当程序执行到2时,会把任务1放在主线程的后面,等主线程里的任务都执行完了在执行。可是这是什么函数啊?这是同步函数啊,它会堵塞当前的线程,后面的任务会等任务1执行完再执行。所以他们又开始互相等待,永远不会往下执行了。

技术分享

任务1对其他任务说:你们快执行啊?你们执行完我才能执行!

其他任务对任务1说:不行啊,你执行完我们才能执行。这是同步那个二货规定的。

任务1和其他任务就开始了漫长的等待……

2.  全局并发队列里的任务在异步函数中执行才能实现并发。

技术分享   

技术分享

   我们发现程序创建了三条线程,每条线程都执行下载图片的任务,三张图片几乎是同时开始下载的。这就实现了并发,也没有堵塞主线程。最重要的一点,下载完的图片,一定要在主线程更新。

       如果有兴趣可以试试把并发队列里的任务放在同步函数中执行,我们就会发现三张图片的下载都是在主线程中进行的,图片好长时间才下载完。因为图片是一个一个下载的,而不像上面是同时开始下载。

       至于自定义队列,我就不讲了,因为和上面的原理差不多,而且用的地方也不多。并发队列系统已经提供了,我们就不要自己创建了。至于串行队列,我们运用多线程就是为了多任务同时进行,串行队列里的任务无论在同步函数还是异步函数中,都不可能同时进行。

       关于GCD还有很多其他的用处,我会在下一篇文章中讲。

            

iOS多线程之5.GCD的基本使用

标签:理解   text   更新   fill   自己   alt   相等   函数   style   

原文地址:http://www.cnblogs.com/doujiangyoutiao/p/6016859.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!