多线程-GCD的使用事列


#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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值