码迷,mamicode.com
首页 > 编程语言 > 详细

OC开发_课堂笔记——多线程之GCD

时间:2015-06-02 14:42:54      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

 

一、进程和线程  

  技术分享

 

二、各种队列!

  1、GCD:Grand Central Dispatch

  2、串行队列(Serial)

        你可以创建任意个数的串行队列,每个队列依次执行添加的任务,一个队列同一时刻只能执行一个任务(串行),但是各个队列之间不影响,可以并发执行。每个队列中的任务运行在一个由各自串行队列    维护的独立线程上,一个队列中只有一个线程

  3、并行队列(Concurrent)

        并行队列是不允许自己创建的,系统中存在三个不同优先级的并行队列。并行队列依旧按照任务添加的顺序启动任务,但是,后一个任务无须等待前一个任务执行完毕,而是启动第一个任务后,立即启动    下一个任务。至于同一时刻允许同时运行多少个任务由系统决定。任务各自运行在并行队列为他们提供的独立线程上,并行队列中同时运行多少个任务,就必须维护多少个线程

  4、主调度队列(main dispatch queue)

        主调度队列中的任务运行在应用程序主线程上,所以,如果你要修改应用程序的界面,他是唯一的选择
 
  5、全局队列(苹果为了方便多线程的设计,提供一个全局队列,供所有的APP共同使用

 

三、队列的任务处理

  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、并行和串行的任务调度的区别

  技术分享

 

OC开发_课堂笔记——多线程之GCD

标签:

原文地址:http://www.cnblogs.com/daomul/p/4492191.html

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