GCD 个人理解

1.三种队列:main_queue、全局队列、用户队列
2.向队列派发任务块:
    dispatch_sync  //同步阻塞当前的执行流程、线程
    dispatch_async //不阻塞
    Ios中使用更多是异步任务(不阻塞UI线程的任务)
3.队列中任务快的执行顺序可靠group操作
4.底层特定事件监听及相应dispatch source

- (IBAction)click:(id)sender {
    dispatch_queue_t global_queue_high = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
    dispatch_queue_t global_queue_default = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_queue_t global_queue_low = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);
    dispatch_queue_t global_queue_bg = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
    NSLog(@"%@",global_queue_high);
    NSLog(@"%@",global_queue_default);
    NSLog(@"%@",global_queue_low);
    NSLog(@"%@",global_queue_bg);
    
    系统默认提供四种全局并发队列,即四个优先级;但这里所说的优先级并不是说优先级高的队列中的任务就一定比优先级低的队列中的任务先执行
    这不是绝对的,个人理解这个优先级可能是在系统资源紧张时,各个待运行的任务之间,哪个任务所在队列优先级高可能就先执行,在资源充足的
    情况下是各自运行各自的
    而且同一个全局并发队列里的各个任务之间也是并发执行,任务的执行先后顺序都不确定的


//    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
//        sleep(8);
//        NSLog(@"DISPATCH_QUEUE_PRIORITY_HIGH");
//    });
    
//    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//       NSLog(@"======");
//        sleep(5);
//    NSLog(@"11111111");
//        sleep(3);
//        NSLog(@"####");
//    });
//
//    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
//        sleep(1);
//        NSLog(@"DISPATCH_QUEUE_PRIORITY_LOW");
//    });
//    
//    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
//        sleep(2);
//        NSLog(@"DISPATCH_QUEUE_PRIORITY_BACKGROUND");
//    });
    
    //自定义队列,串行和并发,,只有串行队列中的任务才是先进先出(FIFO)的模式
//    customerQueue = dispatch_queue_create("com.example.myQueue", DISPATCH_QUEUE_SERIAL);
//    dispatch_async(customerQueue, ^{
//        NSLog(@"11111");
//        sleep(3);
//        NSLog(@"rrrrr");
//    });
    //dispatch_barrier_async的使用
    //dispatch_barrier_async是在前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行(可做一些多任务间的加锁、同步锁、类似于串行队列的功能)
    //只能对用户队列且是并行的队列才有用,全局队列不起效

    dispatch_queue_t queue = dispatch_queue_create("gcdtest.rongfzh.yc", DISPATCH_QUEUE_CONCURRENT);
    
//    dispatch_async(queue, ^{
//        
//        [NSThread sleepForTimeInterval:2];
//        
//        NSLog(@"dispatch_async1");
//        
//    });
//    
//    dispatch_async(queue, ^{
//        
//        [NSThread sleepForTimeInterval:4];
//        
//        NSLog(@"dispatch_async2");
//        
//    });
    
    dispatch_barrier_async(queue, ^{
        
        NSLog(@"dispatch_barrier_async");
        
        [NSThread sleepForTimeInterval:4];
        
        NSLog(@"dispatch_barrier_async111");
        
        
    });
    
    dispatch_async(queue, ^{
        sleep(2);
        NSLog(@"dispatch_async3");
        
    });
    
    dispatch_async(queue, ^{
        sleep(5);
        NSLog(@"dispatch_asyncwww");
    });
    
//    dispatch_group_t group = dispatch_group_create();
//    dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//        NSLog(@"first start");
//        sleep(3);
//        NSLog(@"fisrt end");
//    });
//    dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//        NSLog(@"second start");
//        sleep(3);
//        NSLog(@"second end");
//    });
//    dispatch_group_notify(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//        NSLog(@"notify");
//    });
    
    //dispatch_group_wait(group, DISPATCH_TIME_FOREVER); //简单的采用wait监听整个组中的任务则会阻塞UI线程,dispatch_group_notify方式不会

    //1.如果工程target版本低于 iOS 6.0 or Mac OS X 10.8,则需自己管理GCD对象,使用(dispatch_retain,dispatch_release),不管MRC还是ARC都要手动管理
    //2.是 iOS 6.0 or Mac OS X 10.8 或者更高的,ARC已经能够管理GCD对象了,这时候,GCD对象就如同普通的OC对象一样,不应该使用dispatch_retain ordispatch_release

    //dispatch_release(group);

//    dispatch_source_merge_data
//    dispatch_source_t costomerSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_WRITE,
posted @ 2014-08-04 17:56  SEC.VIP_网络安全服务  阅读(124)  评论(0编辑  收藏  举报