美文网首页
iOS 多线程基本概念

iOS 多线程基本概念

作者: 着魔的毛豆 | 来源:发表于2016-06-29 10:12 被阅读23次

    iOS 多线程基本概念

    容易混淆的几点

    • 同步与异步

    同步:不会开启新线程
    异步:可以开启新线程(但不代表一定会开启新线程)

    • 串行与并发

    串行:任务一个一个执行
    并发:多个任务同时执行(通常与异步配合使用从而实现多线程)

    队列的创建串行队列与并发队列都有两种创建方式

    • 串行队列的创建
    // 手动创建串行队列 
    dispatch_queue_t queue = dispatch_queue_create("com.example.myqueue", DISPATCH_QUEUE_SERIAL);  
    // 系统主队列 
    dispatch_queue_t main_queue = dispatch_get_main_queue();
    
    • 并发队列的创建
    // 手动创建并发队列 
    dispatch_queue_t queue = dispatch_queue_create("com.example.myqueue", DISPATCH_QUEUE_CONCURRENT);  
    
    // 系统并发队列 
    dispatch_queue_t globl_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    
    

    几种组合

    • 异步串行队列
    // 1.手动创建串行队列(会开启新线程,任务串行执行)
    dispatch_queue_t queue = dispatch_queue_create("com.example.myqueue", DISPATCH_QUEUE_SERIAL);
    dispatch_async(queue, ^{ NSLog(@"test"); });
    //2.系统主队列(不会开启新线程,任务串行执行) 
    dispatch_queue_t main_queue = dispatch_get_main_queue();dispatch_async(main_queue, ^{ NSLog(@"test"); });
    
    • 异步并发队列
    // 不管手动创建还是使用系统的并发队列,都会开启新线程,并且任务并发执行
    // 手动创建并发队列
    dispatch_queue_t queue = dispatch_queue_create("com.example.myqueue", DISPATCH_QUEUE_CONCURRENT);
      dispatch_async(queue, ^{ NSLog(@"test"); }); 
    // 系统并发队列 
    dispatch_queue_t globl_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(globl_queue, ^{ NSLog(@"test"); });
    
    • 同步串行队列 与 同步并发队列
    //这两种情况都不会开启新线程,并且任务都是串行执行```
    # 注意
    - 不要在主线程中使用dispatch_sync(),会造成死锁.

    相关文章

      网友评论

          本文标题:iOS 多线程基本概念

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