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

多线程-GCD的使用事列

时间:2015-08-30 12:56:41      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:


#import "ViewController.h"


@interface ViewController ()


@end

/**

 *  

 

 1.GCD底层也是用线程来实现的

 2.GCD有两种执行任务的方式

    01.同步dispatch_sync(避免在主线程中使用同步执行主线程任务容易死锁)

    02.异步dispatch_async

 3.GCD的参数:queue:队列    Block :任务

 4.同步异步的区别:

    同步:在当前线程执行,顺序执行

    异步:在另一条线程执行,可以开辟一个线程,利用系统空闲时间去执行

 5.死锁在主队列(GCD)里面 在主线程(ui线程)同步执行任务;主队列与主线程是同一个东西;

 

 

 6.主队列 同步执行某个任务的时候,会等待前面的任务执行完毕之后才去执行主队列里面的任务;但主队列是在主线程里面执行任务的;《他们两个现在 在同一个线程里面》线程是顺序执行任务的,这时候主线程会等主队列里面的任务执行完毕 ,再去继续执行 ,主队列会等待主线程执行完毕才回去执行主队列里面的任务。

 

 7.串行队列分两种

    01.主队列 dispatch_get_main_queue()主队列是GCD自带的一种特殊的串行队列,放在主队列中的任务,都会放在主线程执行

    02.创建一个队列

 

 

 */

@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

   

    //通过GCD获得主队列

    //所有队列接收队列对象都要dispatch_queue_t

//    dispatch_queue_t mainQueue = dispatch_get_main_queue();

    

    //同步执行任务

//    dispatch_sync(mainQueue, ^{

//        NSLog(@"dispatch_sync");

//    });


    

    //异步执行任务

    

//    NSLog(@"主线程执行到这里,发现一个异步执行代码,会执行异步执行的代码,但是,不会等待里面的任务执行完毕之后再继续执行主线程任务");

//    dispatch_async(mainQueue, ^{

//        NSLog(@"异步执行任务");

//    });

    

    

//    dispatch_queue_t mainQueues = dispatch_get_main_queue();

//    

//    dispatch_async(mainQueues, ^{

//        NSLog(@"sssss");

//    });

//   

    //串行队列 有两种方式 1.主队列 2.创建队列 串行队列是按照顺序执行的

    

    //自己创建队列的方式<串行队列>

//    dispatch_queue_t huluWaQueue = dispatch_queue_create ("湖经济可能更客观", NULL);

//    dispatch_sync(huluWaQueue, ^{

//         NSLog(@"11111");

//    });

//    dispatch_sync(huluWaQueue, ^{

//        NSLog(@"222222");

//    });

//    dispatch_sync(huluWaQueue, ^{

//        NSLog(@"333333");

//    });

//    dispatch_sync(huluWaQueue, ^{

//        NSLog(@"4444444");

//    });

    

    

//并发队列 可以指定队列任务的优先级 使用全局并发队列

    

//#define DISPATCH_QUEUE_PRIORITY_HIGH 2

//#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0

//#define DISPATCH_QUEUE_PRIORITY_LOW (-2)

//#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN

 

//GCD默认已经提供了全局的并发队列,供整个应用使用,不需要手动创建

    

    //long identifier指定优先级

    dispatch_queue_t firstQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);

    dispatch_queue_t secondQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);

    dispatch_queue_t thirdQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    

    dispatch_async(firstQueue, ^{

        NSLog(@"11111");

    });

    dispatch_async(secondQueue, ^{

        NSLog(@"22222");

    });

    dispatch_async(thirdQueue, ^{

        NSLog(@"33333");

    });

}




- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end


版权声明:本文为博主原创文章,未经博主允许不得转载。

多线程-GCD的使用事列

标签:

原文地址:http://blog.csdn.net/jzq_sir/article/details/48103519

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