ios GCD ---- (1)

简介: GCDGrand Central Dispatch (GCD)  字面意思 宏大的中央调度器  反正就是很牛逼吧 在 gcd 中并不叫多线程开发,因为开发者并不涉及线程的开启和关闭以及调度. 只是操作任务在队列中, 所有关于线程的事都是有 GCD 帮我们去做的;线程的开启线程的以及操作都是通过 GCD 完成的 所以开发者并不牵扯到线程的调度;只是调度的任务.

GCD

Grand Central Dispatch (GCD)  字面意思 宏大的中央调度器  反正就是很牛逼吧 

在 gcd 中并不叫多线程开发,因为开发者并不涉及线程的开启和关闭以及调度. 只是操作任务在队列中, 所有关于线程的事都是有 GCD 帮我们去做的;

线程的开启线程的以及操作都是通过 GCD 完成的 所以开发者并不牵扯到线程的调度;只是调度的任务.具体开多少线程  什么时候开都有系统自己去操作

主队列 & 串行队列的区别?

  一个一个安排任务,队列特点:FIFO

 

  -并发队列:可以调度多个任务

    -串行队列:必须等待一个任务执行完成,再调度另外一个任务。最多只能开启一个线程。

  -主队列:以FIFO调度任务,如果主线程删共有任何任务在执行,主队列就不会调度任务,主要负责在主线程上执行任务!

 

 

全局队列

/*
     
     ios 7 
     DISPATCH_QUEUE_PRIORITY_HIGH 2  高优先级
     DISPATCH_QUEUE_PRIORITY_DEFAULT 0 默认优先级
     DISPATCH_QUEUE_PRIORITY_LOW (-2) 低优先级
     DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN 非常低 基本忽略
     ios 8 用户体验度
     
     *  - QOS_CLASS_USER_INTERACTIVE 用户交互
     *  - QOS_CLASS_USER_INITIATED   用户使用
     *  - QOS_CLASS_DEFAULT          默认使用
     *  - QOS_CLASS_UTILITY          使用工具
     *  - QOS_CLASS_BACKGROUND       后台使用
     
     预留参数
     */
    
    dispatch_async(dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0), ^{
        NSLog(@"异步");
    });

并发异步

/**
 并发异步 开启异步线程 执行顺序 无序
 第一个参数: 线程标识符
 第二个参数:
DISPATCH_QUEUE_CONCURRENT 并发队列
  
*/ dispatch_queue_t q = dispatch_queue_create(queueName, DISPATCH_QUEUE_CONCURRENT); for (int i = 0; i < 100 ; i ++ ) { dispatch_async(q, ^{ NSLog(@"%zd, ----- %zd",i ,[NSThread isMainThread]); }); }

并发同步

/**
     并发同步 不开启线程 按顺序执行
     1 线程标识符
     2 线程状态, DISPATCH_QUEUE_CONCURRENT 并发队列
     */
    dispatch_queue_t q = dispatch_queue_create(queueName, DISPATCH_QUEUE_CONCURRENT);

    for (int i = 0; i < 100 ; i ++ ) {
        dispatch_sync(q, ^{
            NSLog(@"%zd, ----- %zd",i ,[NSThread isMainThread]);
        });
    }

串行同步

/**
     串行同步 不开启线程 按顺序执行
     
     */
    dispatch_queue_t q = dispatch_queue_create(queueName, DISPATCH_QUEUE_SERIAL);
    
    for (int i = 0; i < 100 ; i ++ ) {
        dispatch_sync(q, ^{
            NSLog(@"%zd, ----- %zd",i ,[NSThread isMainThread]);
        });
    }

串行异步

/**
     串行异步 开启子线程线程 按顺序执行
     */
    dispatch_queue_t q = dispatch_queue_create(queueName, DISPATCH_QUEUE_SERIAL);
    
    for (int i = 0; i < 100 ; i ++ ) {
        dispatch_async(q, ^{
            NSLog(@"%zd, ----- %zd",i ,[NSThread isMainThread]);
        });
    }

 线程组

    //创建线程
    dispatch_queue_t q = dispatch_queue_create(queueName, DISPATCH_QUEUE_CONCURRENT);
    //创建线程组
    dispatch_group_t g = dispatch_group_create();
    
    dispatch_group_async(g, q, ^{
        
    });
        //添加任务到线程组
    dispatch_group_async(g, q, ^{
        
    });
    dispatch_group_async(g, q, ^{
        
    });
    dispatch_group_async(g, q, ^{
        
    });
    
    /**
     所有任务完成在 制定的线程通知任务完成
     */
    dispatch_group_notify(g, dispatch_get_main_queue(), ^{
        
    });

单次执行

/*
     只执行一次
     */
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        NSLog(@"只执行一次线程");
    });
  //通常应用于创建单例 保证线程安全

 

相关文章
|
2月前
|
API Swift C语言
探索iOS开发:Swift中的异步编程与GCD应用
【8月更文挑战第4天】在iOS开发的海洋中,掌握Swift语言的航向是至关重要的。本文将引领你深入理解Swift中的异步编程概念,并借助Grand Central Dispatch(GCD)这一强大的工具,来简化并发编程的复杂性。我们将通过实际代码示例,展现如何在iOS应用中高效地管理后台任务和提升用户界面的响应性。
61 3
|
5月前
|
iOS开发 开发者 UED
iOS 中的并发编程:GCD 与 Operation 的对比与实践
【4月更文挑战第23天】 在iOS开发中,为了提高应用的性能和响应能力,理解并合理运用并发编程是至关重要的。本文将深入探讨两种主要的并发模式:Grand Central Dispatch (GCD) 和 NSOperation。我们将比较它们的优势和局限性,并通过代码示例演示如何在实际场景中应用这两种技术来优化应用性能。文章旨在为开发者提供一个清晰的指南,以便在选择适合自己项目的并发工具时做出明智的决策。
|
5月前
|
调度 iOS开发 开发者
iOS 中的并发编程模式:理解 GCD 和 Operation Queues
【4月更文挑战第19天】 在现代 iOS 应用开发中,有效地管理线程和并发是至关重要的。为了确保用户界面的流畅性和后台任务的高效运行,开发者需要掌握并发编程技术。本文深入探讨了两种主要的并发模式:Grand Central Dispatch (GCD) 和 Operation Queues。我们将分析它们的工作原理,比较它们的特点,并通过实际代码示例说明如何在 iOS 应用中实现高效的并发处理。通过本文,读者将获得在 iOS 平台上进行多线程开发的实用知识,以及如何根据不同的应用场景选择最合适的并发工具。
|
5月前
|
API 调度 iOS开发
多线程和异步编程:什么是 GCD(Grand Central Dispatch)?如何在 iOS 中使用 GCD?
多线程和异步编程:什么是 GCD(Grand Central Dispatch)?如何在 iOS 中使用 GCD?
67 1
|
安全 调度 C语言
iOS多线程之GCD-同步、异步、并发、串行、线程组、栅栏函数、信号量等全网最全的总结
iOS多线程之GCD-同步、异步、并发、串行、线程组、栅栏函数、信号量等全网最全的总结
897 1
|
iOS开发
iOS中的多线程与GCD队列关系
iOS中的多线程与GCD队列关系
179 0
iOS中的多线程与GCD队列关系
|
存储 网络性能优化 调度
iOS-底层原理 28:GCD 之 底层原理分析
iOS-底层原理 28:GCD 之 底层原理分析
220 0
iOS-底层原理 28:GCD 之 底层原理分析
|
程序员 调度 C语言
iOS-底层原理 26:GCD 之 函数与队列
iOS-底层原理 26:GCD 之 函数与队列
158 0
iOS-底层原理 26:GCD 之 函数与队列
iOS-底层原理 27:GCD 之 NSThread & GCD & NSOperation
iOS-底层原理 27:GCD 之 NSThread & GCD & NSOperation
267 0
|
iOS开发
iOS - GCD队列、任务组合
iOS - GCD队列、任务组合