zoukankan      html  css  js  c++  java
  • iOS:GCD理解1(串行-并行、同步-异步)

    1、获取并行、创建串行 队列

      1-1)、获取 并行(全局) 队列 ,DISPATCH_QUEUE_PRIORITY_DEFAULT 为默认优先级。

    dispatch_queue_t global_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT , 0);
    

      1-2)、创建 串行 队列,DISPATCH_QUEUE_SERIAL 为串行

    dispatch_queue_t serial_queue =  dispatch_queue_create("test", DISPATCH_QUEUE_SERIAL);
    

    2、创建同步、异步 任务

      2-1)、创建同步任务。

    dispatch_sync(global_queue, ^{
    
    	//do something 1
    
        });
    
    dispatch_sync(serial_queue, ^{
    
    	//do something 2
    
        });
    

      2-2)、创建异步任务。 

    dispatch_async(global_queue, ^{
    
    	//do something 3
    
       });
    
    dispatch_async(serial_queue, ^{
    
    	//do something 4
    
       });
    

    0、暂且把 //do something x 当成任务,下同。

    1、新创建的 dispatch_async(异步)、dispatch_sync(同步)任务,永远是添加到队列 queue 的队尾等待。

    2、对于队列 queue 来说,如果是 并行 队列 global_queue,那么将对添加的任务判断:

      1)、如果添加的任务是 dispatch_sync(同步),那么将执行该任务 与 之前没执行完的 dispatch_async(异步) 任务(如果有的话)。

      2)、如果添加的任务是 dispatch_async(异步),那“跳过”,判断下一个任务,且和下一个任务交叉执行。

    3、对于队列 queue 来说,如果是 串行 队列 serial_queue,那么不管添加的任务类型 dispatch_async(异步)、dispatch_sync(同步),都会顺序执行。

  • 相关阅读:
    Python爬虫一
    Python爬虫二
    DRF框架中的演变View
    计算时间复杂度例题
    vue2.x webpack打包资源路径问题
    vs code运行c语言 控制台乱码 问题
    解决视频的声音和画面不同步问题
    c语言数据结构,静态链表,结构体数组
    swagger @ApiModel添加实体类不生效
    计算及校验海明码的3个举例
  • 原文地址:https://www.cnblogs.com/leonlincq/p/6134621.html
Copyright © 2011-2022 走看看