async线程异步,sync 线程同步、dispatch

dispatch_sync 线程同步、dispatch_async线程异步

dispatch_sync 线程同步、dispatch_async线程异步

比如

比如

   //同步
    dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"dispatch_sync - 1");
    });
    dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"dispatch_sync - 2");
    });

    dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"dispatch_sync - 3");
    });

    dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"dispatch_sync - 4");
    });
   //同步
    dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"dispatch_sync - 1");
    });
    dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"dispatch_sync - 2");
    });

    dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"dispatch_sync - 3");
    });

    dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"dispatch_sync - 4");
    });

那个代码输出的结果是 1 2 3 4 依次输出、无论你运行多少次都会是这一种结果

这么些代码输出的结果是 1 2 3 4 依次输出、无论你运行多少次都会是这一种结果

 

 

唯独来看上边的异步呢?

而是来看下边的异步呢?

//并行队列、同步
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"1");
    });
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"2");
    });

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"3");
    });

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"4");
    });
//并行队列、同步
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"1");
    });
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"2");
    });

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"3");
    });

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"4");
    });

出口的结果是 1 2 3 4 随机输出、有时 2 1 3 4  有时  1 3 2 4 等

出口的结果是 1 2 3 4 随机输出、有时 2 1 3 4  有时  1 3 2 4 等

 

 

 

 

在iOS中是力不从心运用 dispatch_sync(dispatch_get_main_queue() 

在iOS中是无能为力使用 dispatch_sync(dispatch_get_main_queue() 

缘由如下:

案由如下:

在iOS使用 dispatch_sync(dispatch_get_main_queue()^(){block体});

在iOS使用 dispatch_sync(dispatch_get_main_queue()^(){block体});

dispath向主队列加一个一头的block;

dispath向主队列加一个联合的block;

那儿主队列在等候 
  dispatch_sync(dispatch_get_main_queue(),^(){block体});执行

那时主队列在等待 
  dispatch_sync(dispatch_get_main_queue(),^(){block体});执行

dispatch_sync在守候主队列执行落成。

dispatch_sync在等候主队列执行落成。

为此在此进程中,大家早期调用的dispatch_sync函数向来得不到重临,main
queue被打断,而我辈的block又须要拭目以待main
queue来执行它。造成死锁。

据此在此过程中,大家最初调用的dispatch_sync函数一直得不到再次回到,main
queue被打断,而我辈的block又必要拭目以待main
queue来执行它。造成死锁。

 

 

在iOS 使用主队列 dispatch_get_main_queue() 时 应该运用异步执行

在iOS 使用主队列 dispatch_get_main_queue() 时 应该采用异步执行

dispatch_async(dispatch_get_main_queue(), ^(){

dispatch_async(dispatch_get_main_queue(), ^(){

        NSLog(@”222″);

        NSLog(@”222″);

   });

   });

 

 

 

 

dispatch_sync  :调用用 
  dispatch_sync的线程会等dispatch_sync的对情节执行完再继续执行。

dispatch_sync  :调用用 
  dispatch_sync的线程会等dispatch_sync的对情节执行完再继续执行。

dispatch_async
:调用dispatch_async的线程不会的等dispatch_async的始末,自己继续执行。

dispatch_async
:调用dispatch_async的线程不会的等dispatch_async的始末,自己继续执行。

sync/async的区分在于
调用diapatch的线程是不是等待dispatch执行完。

sync/async的界别在于
调用diapatch的线程是还是不是等待dispatch执行完。

相关文章