美文网首页iOS
iOS 同步、异步、串行、并发(并行)学习

iOS 同步、异步、串行、并发(并行)学习

作者: EngineerPan | 来源:发表于2020-04-04 17:06 被阅读0次

队列优先级

DISPATCH_QUEUE_PRIORITY_HIGH 2                  // 优先级高
DISPATCH_QUEUE_PRIORITY_DEFAULT 0               // 优先级中
DISPATCH_QUEUE_PRIORITY_LOW (-2)                // 优先级低
DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN    // 后台任务优先级

队列类型

// 串行队列
DISPATCH_QUEUE_SERIAL   

// 并发队列
DISPATCH_QUEUE_CONCURRENT

队列创建方式

  • 串行队列
// 默认优先级的串行队列
dispatch_queue_t serialQueue = dispatch_queue_create(DISPATCH_QUEUE_PRIORITY_DEFAULT, DISPATCH_QUEUE_SERIAL);

// 主队列
dispatch_queue_t serialQueue = dispatch_get_main_queue();
  • 并行(并发)队列
// 默认优先级的并行队列
dispatch_queue_t conCurrentQueue = dispatch_queue_create(DISPATCH_QUEUE_PRIORITY_DEFAULT, DISPATCH_QUEUE_CONCURRENT);

// 全局队列
dispatch_queue_t globalQueue = dispatch_get_global_queue(0, 0);

同步函数和异步函数决定了要不要创建新的线程;
同步函数:在当前线程中执行队列里面的任务,不具备开启线程的能力;
异步函数:在新的线程中执行队列里面的任务,具备开启线程的能力;

串行和并行决定了任务的执行方式
串行:一个任务执行完毕后,再执行下一个任务;
并行:多个任务并行执行;

注意:同步执行队列任务,不管是串行还是并行队列,任务都是顺序执行的;

  1. 同步执行串行任务(不会创建新线程(在主线程中执行),任务顺序执行)
dispatch_queue_t serialQueue = dispatch_queue_create(DISPATCH_QUEUE_PRIORITY_DEFAULT, DISPATCH_QUEUE_SERIAL);

/// 任务1
dispatch_sync(serialQueue, ^{
    NSLog(@"同步执行串行队列任务1----当前线程:%@", [NSThread currentThread]);
});

/// 任务2
dispatch_sync(serialQueue, ^{
    NSLog(@"同步执行串行队列任务2----当前线程:%@", [NSThread currentThread]);
});
  1. 同步执行串行(主队列)任务(死锁,主线程和主队列互相等待)
dispatch_queue_t mainQueue = dispatch_get_main_queue();
    
/// 任务1
dispatch_sync(mainQueue, ^{
    NSLog(@"同步执行主队列任务1----当前线程:%@", [NSThread currentThread]);
});
    
/// 任务2
dispatch_sync(mainQueue, ^{
    NSLog(@"同步执行主队列任务2----当前线程:%@", [NSThread currentThread]);
});
  1. 同步执行并发任务(不会创建新线程(在主线程中执行),任务顺序执行)
dispatch_queue_t conCurrentQueue = dispatch_queue_create(DISPATCH_QUEUE_PRIORITY_DEFAULT, DISPATCH_QUEUE_CONCURRENT);

/// 任务1
dispatch_sync(conCurrentQueue, ^{
    NSLog(@"同步执行并发任务1----当前线程:%@", [NSThread currentThread]);
});

/// 任务2
dispatch_sync(conCurrentQueue, ^{
    NSLog(@"同步执行并发任务2----当前线程:%@", [NSThread currentThread]);
});
  1. 同步执行并发(全局队列)任务(不会创建新线程,任务顺序执行)
dispatch_queue_t globalQueue = dispatch_get_global_queue(0, 0);

/// 任务1
dispatch_sync(globalQueue, ^{
    NSLog(@"同步执行全局队列任务1----当前线程:%@", [NSThread currentThread]);
});

/// 任务2
dispatch_sync(globalQueue, ^{
    NSLog(@"同步执行全局队列任务2----当前线程:%@", [NSThread currentThread]);
});
  1. 异步执行串行任务(创建新线程,任务顺序执行)
dispatch_queue_t serialQueue = dispatch_queue_create(DISPATCH_QUEUE_PRIORITY_DEFAULT, DISPATCH_QUEUE_SERIAL);

/// 任务1
dispatch_async(serialQueue, ^{
    NSLog(@"异步执行串行队列任务1----当前线程:%@", [NSThread currentThread]);
});

/// 任务2
dispatch_async(serialQueue, ^{
    NSLog(@"异步执行串行队列任务2----当前线程:%@", [NSThread currentThread]);
});
  1. 异步执行串行(主队列)任务(不会创建新线程,任务顺序执行)
dispatch_queue_t mainQueue = dispatch_get_main_queue();

/// 任务1
dispatch_async(mainQueue, ^{
    NSLog(@"异步执行主队列任务1----当前线程:%@", [NSThread currentThread]);
});

/// 任务2
dispatch_async(mainQueue, ^{
    NSLog(@"异步执行主队列任务2----当前线程:%@", [NSThread currentThread]);
});
  1. 异步执行并发队列任务(会创建新线程,任务无序执行)
dispatch_queue_t conCurrentQueue = dispatch_queue_create(DISPATCH_QUEUE_PRIORITY_DEFAULT, DISPATCH_QUEUE_CONCURRENT);

/// 任务1
dispatch_async(conCurrentQueue, ^{
    NSLog(@"异步执行并发队列任务1----当前线程:%@", [NSThread currentThread]);
});

/// 任务2
dispatch_async(conCurrentQueue, ^{
    NSLog(@"异步执行并发队列任务2----当前线程:%@", [NSThread currentThread]);
});
  1. 异步执行并发(全局)队列任务(会创建新线程,任务无序执行)
dispatch_queue_t globalQueue = dispatch_get_global_queue(0, 0);

/// 任务1
dispatch_async(globalQueue, ^{
    NSLog(@"异步执行全局并发队列任务1----当前线程:%@", [NSThread currentThread]);
});

/// 任务2
dispatch_async(globalQueue, ^{
    NSLog(@"异步执行全局并发队列任务2----当前线程:%@", [NSThread currentThread]);
});

相关文章

  • iOS多线程小结

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

  • iOS 同步、异步、串行、并发(并行)学习

    队列优先级 队列类型 队列创建方式 串行队列 并行(并发)队列 同步函数和异步函数决定了要不要创建新的线程;同步函...

  • 多线程GCD的使用

    一、同步/异步、串行/并行的区别 1.同步/异步 同步/异步是指线程与线程之间的关系。 2.串行/并行 串行、并行...

  • iOS:并发,并行,串行,同步,异步

    https://www.jianshu.com/p/fd0b6215c6bf[https://www.jiansh...

  • GCD基础总结一

    上代码~ 同步串行队列 同步并行队列 异步串行队列 异步并行队列 主队列同步 会卡住 主队列异步

  • GCD 小结

    一、 同步/异步、串行/并行的区别 1.同步/异步 同步/异步是指线程与线程之间的关系. 2.串行/并行 串行/并...

  • ObjC-多线程之GCD

    介绍 基本概念 串行和并行 并发和并行 下图描述的就是并发和并行的区别。 同步和异步 函数说明 Dispatch ...

  • sync 和 async区别

    同步,异步,串行,并行

  • GCD 相关函数

    串行同步 串行异步 并行同步 并行异步 主队列同步 会死锁 主队列异步 异步处理耗时,回主线程刷新UI 栅栏函数 ...

  • GCD

    1、同步串行队列 2、同步并行队列 3、异步串行队列 4、异步并行队列 5、死锁 主线程中创建同步串行队列 主线程...

网友评论

    本文标题:iOS 同步、异步、串行、并发(并行)学习

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