美文网首页iOS学习笔记
GCD的几种创建方式及基本使用

GCD的几种创建方式及基本使用

作者: 学长的日常 | 来源:发表于2016-08-05 08:36 被阅读89次

同步函数

  • 同步函数+主队列
 
    //获得主函数
    dispatch_queue_t queue = dispatch_get_main_queue();
    //2 将任务加入到队列中
    dispatch_sync(queue, ^{
        NSLog(@"1-----%@",[NSThread currentThread]);
    });
    dispatch_sync(queue, ^{
        NSLog(@"2-----%@",[NSThread currentThread]);
    });
    dispatch_sync(queue, ^{
        NSLog(@"3-----%@",[NSThread currentThread]);
    });


  //注意:同步函数+主队列:没有开启新线程,串行执行任务。如果在主线程中使用的话,就会造成阻塞,不会执行队列中的内容。因为同步函数和主队列在主线程中同时执行,造成了冲突。

  • 同步函数+串行队列




    //1 创建串行队列
    dispatch_queue_t queue = dispatch_queue_create("com.zc.queue", NULL);
    //2 将任务加入队列中
    dispatch_sync(queue, ^{
        NSLog(@"1-------%@",[NSThread currentThread]);
    });
    dispatch_sync(queue, ^{
        NSLog(@"2------%@",[NSThread currentThread]);
    });
    dispatch_sync(queue, ^{
        NSLog(@"3------%@",[NSThread currentThread]);
    });

    //注意:同步函数+串行队列:不会开启新的线程,在当前线程执行任务。任务是串行的,执行完一个任务,再执行下一个任务。
  • 同步函数+并发队列
    
    
    
  
    //1 获得全局的并发队列
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    //2 将任务加入到队列中
    dispatch_sync(queue, ^{
        
        NSLog(@"1--%@",[NSThread currentThread]);
    });
    
    dispatch_sync(queue, ^{
        
        NSLog(@"2---%@",[NSThread currentThread]);
    });
    
    dispatch_sync(queue, ^{
        
        NSLog(@"3---%@",[NSThread currentThread]);
    });
      //注意:同步函数+并发队列:不会开启新的线程,串行执行任务

异步函数

  • 异步函数+主队列

    
 
    //1 获得主队列
    dispatch_queue_t queue = dispatch_get_main_queue();
    //2 将任务加入到队列中
    dispatch_async(queue, ^{
        NSLog(@"1----%@",[NSThread currentThread]);
    });
    dispatch_async(queue, ^{
        NSLog(@"2----%@",[NSThread currentThread]);
    });
    dispatch_async(queue, ^{
        NSLog(@"3-----%@",[NSThread currentThread]);
    });
    
   //注意:异步函数+主队列:只在主线程中执行任务,没有开启新线程,串行执行任务
  • 异步函数+串行队列


    //1 创建串行队列
    dispatch_queue_t queue = dispatch_queue_create("com.zc.queue", DISPATCH_QUEUE_SERIAL);
    //2 将任务加入到队列中
    dispatch_async(queue, ^{
        NSLog(@"1------%@",[NSThread currentThread]);
    });
    
    dispatch_async(queue, ^{
        NSLog(@"2-----%@",[NSThread currentThread]);
    });
    
    dispatch_async(queue, ^{
        NSLog(@"3------%@",[NSThread currentThread]);
    });
    
    //注意:异步函数+串行队列:会开启新的线程,但是任务是串行的,执行完一个任务,再执行下一个任务
 
  • 异步函数+并发队列

   
    
  
    
    //1 创建一个并发队列
    //dispatch_queue_t queue = dispatch_queue_create("com.zc.queue", DISPATCH_QUEUE_CONCURRENT);
    //1 获得全局的并发队列
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    //2 将任务加入队列
    dispatch_async(queue, ^{
        for (int i=0; i<5; i++) {
            NSLog(@"1----%@",[NSThread currentThread]);
        }
    });
    dispatch_async(queue, ^{
        for (int i=0; i<5; i++) {
            NSLog(@"2----%@",[NSThread currentThread]);
        }
    });
    dispatch_async(queue, ^{
        for (int i=0; i<5; i++) {
            NSLog(@"3----%@",[NSThread currentThread]);
        }
    });
    
  //注意:异步函数+并发队列:可以同时开启多条新线程,并发执行任务

总结

GCD的几种的创建方式,只有异步函数+并发队列,既开新线程又并发执行任务;异步函数+串行队列:开新
线程但串行执行任务;其他的方式都是不开新线程(意思是在主线程中)并且串行执行任务。异步函数和
同步函数的执行方式不同。异步函数先执行函数体,再执行队列中的任务;同步函数是从头到尾从一步步
执行的,即从函数体头部开始执行,遇到队列,就执行队列中的任务。执行方式的不同,也就数异步函
数+主队列可以运行,而同步函数+主队列就会造成堵塞的原因。

相关文章

  • GCD的几种创建方式及基本使用

    同步函数 同步函数+主队列 同步函数+串行队列 同步函数+并发队列 异步函数 异步函数+主队列 异步函数+串行队列...

  • Swift中几种创建单例的方式

    Swift中几种创建单例的方式: 1.使用全局变量创建 2.使用结构体创建 3.使用GCD创建 测试 == 打印结...

  • iOS多线程--彻底学会多线程之『GCD』

    GCD 文章目录 GCD简介 任务和队列 GCD的使用步骤 队列的创建方法 任务的创建方法 GCD的基本使用 并行...

  • iOS多线程--GCD篇

    GCD 文章目录GCD简介任务和队列GCD的使用步骤队列的创建方法任务的创建方法GCD的基本使用并行队列 + 同步...

  • 多线程

    # 多线程使用 一、NSThread 1、创建的3种基本使用方式 2、线程之间通信方式 二、GCD 1、核心概念:...

  • 多线程【转】

    文章目录GCD简介任务和队列GCD的使用步骤队列的创建方法任务的创建方法GCD的基本使用并行队列 + 同步执行并行...

  • iOS 多线程

    iOS使用线程的方式 pthread NSThread GCD NSOperation NSThread线程的创建...

  • 使用GCD来创建Timer

    推荐使用GCD方式创建timer的原因,GCD是基于内核的,会更加准时,NSTimer和CADisplayLink...

  • GCD timer

    推荐使用GCD方式创建timer的原因,GCD是基于内核的,会更加准时,NSTimer和CADisplayLink...

  • GCD基础学习

    一、队列的创建和获取方式 GCD 的使用步骤 GCD 的使用步骤其实很简单,只有两步。创建一个队列(串行队列或并发...

网友评论

    本文标题:GCD的几种创建方式及基本使用

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