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

IOS中多线程的总结

时间:2017-11-14 19:45:50      阅读:26      评论:0      收藏:0      [点我收藏+]

标签:全局   gcd   dispatch   queue   sop   多线程   nsthread   blog   线程管理   

        首先要知道线程和进程的区别。一个系统上运行的每一个应用程序都是一个线程。而进程中要执行的任务都是在线程上来实现的,所以说线程是进程的最小执行单元。

        进程最少要有一个线程。多线程,顾名思义就是多条线程。

        那么在ios开发中运用到的多线程都有哪些呢,都有什么区别的,下面我们就来详细的吐槽一波。

        说到多线程不得不提到POSix threads,简称PThreads。他是类Unix操作系统中管理线程的一套完整的API。具体的PThreads自己问一下性感迷人的度娘娘嘞!而Ios开发中我们碰到的线程管理具体的有3类,分别是:NSThreadNSOperation(NSOperationQueue)and GCD

一、NSThread

        NSthread我们在开发中用的最多的就是用【NSThread  CurrentThread】来获取当前的线程。他在执行一些比较简单的单任务的时候还是比较好用的,但是当要执行多个任务,并且任务之间还存在一定的关联,有执行先后顺序,这时候NSThread就显得太薄弱了。

二、GCD

        开发过程中我们用的最多的就是GCD了吧。他是基于C语言的一套多线程开发的API。使用起来很方便,我们不用管理线程的生命周期,只需要关注我们执行的任务以及任务之间的关联就可以了,GCD帮我们管理线程的生命周期。GCD归纳起来就是 队列 + 执行方式。也就是说我们需要把执行的任务放到队列中,然后以何种方式执行即可。

        至于队列,GCD为我们提供了两种队列:串行队列和并行队列,这里需要提到的是程序中已经存在的两个特殊的队列,他们分别是主队列(程序为我们创建的一个串行队列)和全局队列(程序为我们创建的一个并行队列)

        串行队列:串行队列,就是说在这个队列上的任务必须是一个接一个执行的,必须等待前面的一个任务执行完毕才可以继续执行下面的任务。而且串行队列不具备开启新线程的能力。

        并行队列:并行队列,就是说在这个队列上的任务不用等前面的任务执行完毕就可以执行其他的任务,他是等待任务执行的时候并发执行多个任务。而且并行队列具备开启新线程的能力,但是他不一定一定开启一个新的线程来执行任务,主要还是看CPU的调度。

        同步执行:必须等dispatch_sync() 函数中的blcok执行完毕才返回该函数,同时同步执行也不能开辟新的线程。

        异步执行:dispatch_async() 函数立刻返回,不用等里面的block执行完毕,可以理解为在下一个执行周期执行block中的任务。异步执行可以开启新的线程,但是不一定一定开启新的线程。

        下面说一下队列和执行方式的几种组合方式。

        1.串行队列 + 同步执行(这里的串行队列不能是主队列,因为会死锁)

        技术分享

         我们可以看到任务是按顺序执行的。

        2.串行队列 + 异步执行

        技术分享

        我们可以看到异步执行的时候dispatch_async() 函数并没用等block执行完毕就继续执行下面的任务了。在下一个执行周期的时候执行了block中的任务。

        3.并行队列 + 同步执行

        技术分享

        任务仍然是按顺序执行的。同步执行必须等block中的任务执行完毕才返回dispatch函数,然后才执行下面的任务

        4.并行队列 + 异步执行

        技术分享

        任务没有按顺序执行。

       

       

IOS中多线程的总结

标签:全局   gcd   dispatch   queue   sop   多线程   nsthread   blog   线程管理   

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!