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

UI21-多线程: GCD Grand Center Dispatch

时间:2015-12-16 09:37:52      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:

多线程:

 GCD  Grand Center Dispatch  中央派遣, 极重要的中心派遣,  任务和队列,任务,执行什么操作,队列:存放任务.

  并发队列,异步,   DISPATCH_QUEUE_CONCURRENT, dispatch_async(queue,^{}); 

              创建多个线程,并发执行, 创建的任务不会立即执行,添加完毕后,这个函数结束之后,再开始并发执行线程, 

  并发队列,同步: DISPATCH_QUEUE_CONCURRENT ,dispatch_sync(queue,^{});

              执行不会开启线程,在主线程同步执行各个子线程,是添加过任务后立即执行,之后才能下一个任务. 有做啥哦任务都是在主线程里完成: 

  串行,同步任务:    DISPATCH_QUEUE_SERIAL ,dispatch_sync(queue,^{});

              串行队列+同步任务:不会开启新线程,在父线程中同步执行各个子线程,也就是逐一执行,并且是添加过任务后立即执行,之后才能添加                       下一个任务  

 串行队列 +异步任务,

             创建新线程,但是只会创建一个新线程,所有的任务都是在这个子线程的里执行,执行顺序按照任务的添加的顺序,并且不是立即执行,而是等着当前的方法结束的时候再执行,

 主队列

             自带的特殊的串行队列, dispatch_get_main_queue();

 全局并发队列, 

       dispatch_get_global_queue(优先级,0);全局并发队列的特性和手动创建的队列一样.

  主队列 + 异步任务 

            不创建新线程,在父线程里执行,执行顺序按照添加任务的先后任务,并且不是立即执行,而是等这个方法结束后以此执行,

 主队列 + 同步任务 

            会产生死锁. 这个会产生问题,死锁,添加任务到主队列的任务要求立即执行,但是主队列是串行队列,当前任务要求执行完当前任务在执行新添加的任务。结果就是:两个任务互相等待,产生死锁

截止执行  dispatch_barrier_async 

     :截断线程执行,以上两个任务完成后才会执行这个任务,并在完成barrier后继续执行下面的任务  任务1,2的执行始终在任务3,4之前 只有在并发队列中才有阶段功能

 技术分享

技术分享

技术分享

 

1.串行之系统方式,主线程

dispatch_queue_t main =dispatch_get_main_queue();

dispatch-async(main,^{}); 在主线程队列中执行block方法, 异步也是顺序执行,主队列是顺序执行,串行的。

技术分享

 


2.串行之自定义方式,

dispatch_queue_t queue=dispatch_queque_creat("245",DISPATCH_QUEUE_SERIAL);

DISPATCH_QUEUE_SERIAL 参数固定了执行方式,串行的执行方式,虽然是异步执行自定义队列的多个任务,也是按添加顺序执行的。只有一个线程,

dispatch_async(queue,^{});在主线程中执行 将block任务放在自定义的队列,

技术分享

 


3.并行方式,全局队列,系统自带的并行处理方式,异步执行,多线程。当线程执行结束的时候才释放,下一个方能使用。

dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEQUE_PRIORITY_DEFAULT,0);

第一个参数是全局队列的优先级,第二个参数是系统保留参数。

 

技术分享

4.并行自定义。

dispatch_queque_t current=dicpatch_queue_create("y12",DISPATCH_QUEUE_CONCURRENT);

在并行队列 中执行异步处理。

技术分享

5.dispatch_queue_t time=dispatch_time(DISPATCH_TIME_NOW,time*NSEC_PER_SEC)

dispatch_after(time1,globe,^{});

在子线程中通信,给主线程添加一个任务,所谓的子线程和主线程之间的通信,就是在子线程中给主线程列加一个任务,

技术分享

1.让一个任务重复执行,拿到队列,添加一个重复的任务,

2.让任务只执行一次,static dispatch_once_t once;

  dispatch_once(&once,^{});

技术分享

封装一个方法,在多线程中异步处理图片加载,回到主线程更新UI。

技术分享

UI21-多线程: GCD Grand Center Dispatch

标签:

原文地址:http://www.cnblogs.com/ytmaylover/p/5050098.html

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