GCD 同步异步的串行和并发问题

来源:互联网 发布:淘宝客佣金 编辑:程序博客网 时间:2024/06/05 01:54
    //1.主对列:(串行队列)
    
    dispatch_queue_t mainQueue=dispatch_get_main_queue();
    
    NSLog(@"%@",[NSThread currentThread]);
    
    
    
    
    //2.全局并行队列
    
    dispatch_queue_t concu=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
    
    
    
    
    
    //3.创建串行队列
    
    dispatch_queue_t queueSerial=dispatch_queue_create("jrqueue1",DISPATCH_QUEUE_SERIAL);
    
    
    
    
    
    //4.创建并行队列
    
    dispatch_queue_t queueConcu=dispatch_queue_create("jrqueue2",DISPATCH_QUEUE_CONCURRENT);
    
    
    
    
    

    //同步执行+串行队列

//主队列:卡死(死锁)

//自定义:顺序执行 走主线程

    
    /*
     
     dispatch_sync(queueSerial, ^{
     
     [NSThread sleepForTimeInterval:2];
     
     NSLog(@"同步串行队列1-----%@",[NSThread currentThread]);
     
     });
     
     
     
     dispatch_sync(queueSerial, ^{
     
     [NSThread sleepForTimeInterval:2];
     
     NSLog(@"同步串行队列2-----%@",[NSThread currentThread]);
     
     });
     
    
    */
    
    
    //同步执行+并行队列  走主线程

//主队列:顺序执行

//自定义:顺序执行  

    
    /*
     dispatch_sync(queueConcu, ^{
     
     [NSThread sleepForTimeInterval:2];
     
     NSLog(@"同步并行队列1-----%@",[NSThread currentThread]);
     
     });
     
     
     
     dispatch_sync(queueConcu, ^{
     
     [NSThread sleepForTimeInterval:2];
     
     NSLog(@"同步并行队列2-----%@",[NSThread currentThread]);
     
     });
     
    
    */
    
    
    //异步执行+串行队列-----开启一个子线程,且顺序执行
//主队列:顺序执行(走主线程)   
//自定义:顺序执行:(开辟子线程,子队列共用一个线程)   
    
     dispatch_async(queueSerial, ^{
     
     [NSThread sleepForTimeInterval:2];
     
     NSLog(@"异步串行队列1-----%@",[NSThread currentThread]);
     
     });
     
     
     
     dispatch_async(queueSerial, ^{
     
     [NSThread sleepForTimeInterval:2];
     
     NSLog(@"异步串行队列2-----%@",[NSThread currentThread]);
     
     });
     
     
     
     dispatch_async(queueSerial, ^{
     
     [NSThread sleepForTimeInterval:2];
     
     NSLog(@"异步串行队列3-----%@",[NSThread currentThread]);
     
     });
     
    

    
    
    //异步执行+并行队列----开启多个线程,且并发执行(无序)

 

//主队列: 无序执行(开辟子线程,每一个任务单独开辟一个线程)

//自定义:无序执行(开辟子线程,每一个任务单独开辟一个线程)

//相同:当主线程走到子线程是,子线程会同时执行 


/*

    
     dispatch_async(concu, ^{
     
     [NSThread sleepForTimeInterval:2];
     
     NSLog(@"异步并行队列1-----%@",[NSThread currentThread]);
     
     });
     
     
     
     dispatch_async(concu, ^{
     
     [NSThread sleepForTimeInterval:2];
     
     NSLog(@"异步并行队列2-----%@",[NSThread currentThread]);
     
     });
     
     
     
     dispatch_async(concu, ^{
     
     [NSThread sleepForTimeInterval:2];
     
     NSLog(@"异步并行队列3-----%@",[NSThread currentThread]);
     
     });
     
    
    */
    
    
    //主对列+同步执行-----死锁(将以下两个添加到主队列,等待前面的执行完成(loadView。loadData之类的),但是当执行到这一步时,形成死循环)
    
    
     /*
     dispatch_sync(mainQueue, ^{
     
     [NSThread sleepForTimeInterval:2];
     
     NSLog(@"同步主队列1-----%@",[NSThread currentThread]);
     
     });
     
     
     
     dispatch_sync(mainQueue, ^{
     
     [NSThread sleepForTimeInterval:2];
     
     NSLog(@"同步主队列2-----%@",[NSThread currentThread]);
     
     });
     
    */
   
0 0
原创粉丝点击