美文网首页
iOS 线程 同步、异步 代码记录

iOS 线程 同步、异步 代码记录

作者: LT_9999 | 来源:发表于2019-06-12 11:24 被阅读0次

同步加并行 :

线程是一块执行,

-(void)concurrentSync {

    dispatch_queue_t serialQueue = dispatch_queue_create("com.tian.lawrence",DISPATCH_QUEUE_CONCURRENT);

    NSLog(@"1 - %@",[NSThread currentThread]);

    dispatch_sync(serialQueue,^{

        NSLog(@"2 - %@",[NSThread currentThread]);

    });

    dispatch_sync(serialQueue,^{

        NSLog(@"3 - %@",[NSThread currentThread]);

    });

    NSLog(@"4 - %@",[NSThread currentThread]);

}

异步加并行:

不会发生阻塞,没有先后顺序

-(void)concurrentAsync {

    dispatch_queue_t serialQueue = dispatch_queue_create("com.tian.lawrence",DISPATCH_QUEUE_CONCURRENT);

     NSLog(@"1 - %@",[NSThread currentThread]);

    dispatch_async(serialQueue,^{

        NSLog(@"2 - %@",[NSThread currentThread]);

    });

    dispatch_async(serialQueue,^{

        NSLog(@"3 - %@",[NSThread currentThread]);

    });

    NSLog(@"4 - %@",[NSThread currentThread]);

}

同步加串行:

线程代码的先后顺序执行,下一个接着执行

-(void)serialSync {

    dispatch_queue_t serialQueue = dispatch_queue_create("com.tian.lawrence",DISPATCH_QUEUE_SERIAL);

    NSLog(@"1 - %@",[NSThread currentThread]);

    dispatch_sync(serialQueue,^{

        NSLog(@"2 - %@",[NSThread currentThread]);

    });   

    dispatch_sync(serialQueue,^{

        NSLog(@"3 - %@",[NSThread currentThread]);

    });

    NSLog(@"4 - %@",[NSThread currentThread]);

}

异步加串行:

-(void)serialAsync {

    dispatch_queue_t serialQueue = dispatch_queue_create("com.tian.lawrence",DISPATCH_QUEUE_SERIAL);

    NSLog(@"1 - %@",[NSThread currentThread]);

    dispatch_async(serialQueue,^{

        NSLog(@"2 - %@",[NSThread currentThread]);

    });

    dispatch_async(serialQueue,^{

        NSLog(@"3 - %@",[NSThread currentThread]);

    });

    NSLog(@"4 - %@",[NSThread currentThread]);

}

注意:

在主队列中添加同步任务会产生死锁,进而导致程序崩溃。

如:

-(void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view,typically from a nib.

NSLog(@"===========1");

dispatch_sync(dispatch_get_main_queue(),^{

NSLog(@"===========2");

});

NSLog(@"===========3");

}

相关文章

  • iOS 线程 同步、异步 代码记录

    同步加并行 : 线程是一块执行, -(void)concurrentSync { dispatch_queue...

  • iOS 多线程基础

    转自:iOS 多线程基础 - 简书 多线程同步和异步的区别?IOS中如何实现多线程的同步? 异步:可以同时执行多条...

  • iOS-14 线程基础

    参考 ios的线程和同步异步操作 - 简书线程 同步异步 Timer 等使用 本文主要从 1、 ios三种创建方式...

  • iOS 多线程基本概念

    iOS 多线程基本概念 容易混淆的几点 同步与异步 同步:不会开启新线程异步:可以开启新线程(但不代表一定会开启新...

  • iOS多线程小结

    同步异步串行并行 同步串行:不开启线程 同步并行:不开启线程 异步串行:最多开启一个线程 异步并行:开启线程 同步...

  • 12-第十二章 定时器 Math函数

    单线程容易被阻塞 / 同步 会很耗时异步 后续的任务无需等待 定时器是异步的,同步代码和异步代码同时存在的时候,同...

  • iOS_2016最新版面试题(附答案)

    每天四道题,让精彩填满生活... 1、多线程同步和异步的区别。iOS如何实现多线程的同步? 答:同步就是指一个线程...

  • 2019-08-17

    异步是什么? 异步:不是同步执行的代码就是异步。同步代码就是从上往下执行,因为JS是单线程的原因,所以在一条线上如...

  • JS基础知识5--同步和异步

    题目 一,同步和异步的区别是什么?异步是基于JS单线程的,异步不会阻塞代码的执行,同步会阻塞代码的执行 二,手写p...

  • iOS线程同步

    iOS线程同步 iOS线程同步

网友评论

      本文标题:iOS 线程 同步、异步 代码记录

      本文链接:https://www.haomeiwen.com/subject/pgpkfctx.html