GCD全解-dispatch_queue-队列创建

简介: GCD全解-dispatch_queue-队列创建

1、串行队列


1、DISPATCH_QUEUE_SERIAL


/// 用于创建按先进先出(FIFO)顺序串行调用块的调度队列
#define DISPATCH_QUEUE_SERIAL NULL


2、dispatch_get_main_queue()


/// 绑定到主线程的默认队列。
dispatch_queue_main_t
dispatch_get_main_queue(void)
{
  return DISPATCH_GLOBAL_OBJECT(dispatch_queue_main_t, _dispatch_main_q);
}


2、并行队列


1、DISPATCH_QUEUE_CONCURRENT


/// 可以并发调用块并支持使用dispatch barrier API提交的障碍块的调度队列。
#define DISPATCH_QUEUE_CONCURRENT \
  DISPATCH_GLOBAL_OBJECT(dispatch_queue_attr_t, \
  _dispatch_queue_attr_concurrent)


2、dispatch_get_global_queue(queue_priority, 0);


/** 返回一个已知全局并发队列。已知的全局并发队列不能被修改。
* identifier:队列优先级标识
* flags: 默认传入0就好了
*/
dispatch_queue_t dispatch_get_global_queue(long identifier, unsigned long flags);
/// 全局并发队列由它们的优先级标识,优先级映射到以下几个级别:
#define DISPATCH_QUEUE_PRIORITY_HIGH 2
#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0
#define DISPATCH_QUEUE_PRIORITY_LOW (-2)
#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN


3、创建Queue

dispatch_queue_create(@”字符串标签”,DISPATCH_QUEUE_CONCURRENT / DISPATCH_QUEUE_SERIAL )



/**创建Queue
* label:字符串标签,可以为空。
* attr:队列类型:
* 1、传入DISPATCH_QUEUE_SERIAL or a NULL创建的是顺序执行的串行队列;
* 2、传入DISPATCH_QUEUE_CONCURRENT创建的是并发队(有点像是global concurrent queues)
*/
dispatch_queue_t dispatch_queue_create(const char *_Nullable label, dispatch_queue_attr_t _Nullable attr);

示例:


//获取主队列
dispatch_queue_t mainQueue = dispatch_get_main_queue();
//全局并发队列
dispatch_queue_t queue4 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//串行队列:DISPATCH_QUEUE_SERIAL|NULL
dispatch_queue_t queue3 = dispatch_queue_create("queue3", DISPATCH_QUEUE_SERIAL|NULL);
//并行队列:DISPATCH_QUEUE_CONCURRENT
dispatch_queue_t queue4 = dispatch_queue_create("queue4", DISPATCH_QUEUE_CONCURRENT)
相关文章
ffmpeg中--enable-gpl什么意思
ffmpeg中--enable-gpl什么意思
820 0
ffmpeg中--enable-gpl什么意思
|
Docker 容器
x86 平台利用 qemu-user-static 实现 arm64 平台 docker 镜像的运行和构建
x86 平台利用 qemu-user-static 实现 arm64 平台 docker 镜像的运行和构建
2658 1
|
开发者 iOS开发
iOS10通知框架UserNotification理解与应用(二)
iOS10通知框架UserNotification理解与应用
579 0
iOS10通知框架UserNotification理解与应用(二)
|
安全 测试技术 开发工具
Git分支和标签的命名规范
四个环境分别是:dev、test、pre、pro(master),中文名字:开发环境、测试环境、灰度环境、生产环境 dev环境:开发环境,外部用户无法访问,开发人员使用,版本变动很大。 test环境:测试环境,外部用户无法访问,专门给测试人员使用的,版本相对稳定 pre环境:灰度环境,外部用户可以访问,但是服务器配置相对低,其它和生产一样。 pro(master)环境:生产环境,面向外部用户的环境,连接上互联网即可访问的正式环境
|
Java 开发者 Spring
【SpringBoot 异步魔法】@Async 注解:揭秘 SpringBoot 中异步方法的终极奥秘!
【8月更文挑战第25天】异步编程对于提升软件应用的性能至关重要,尤其是在高并发环境下。Spring Boot 通过 `@Async` 注解简化了异步方法的实现。本文详细介绍了 `@Async` 的基本用法及配置步骤,并提供了示例代码展示如何在 Spring Boot 项目中创建与管理异步任务,包括自定义线程池、使用 `CompletableFuture` 处理结果及异常情况,帮助开发者更好地理解和运用这一关键特性。
2056 1
|
Docker 容器
docker:记录如何在x86架构上构造和使用arm架构的镜像
为了实现国产化适配,需将原x86平台上的Docker镜像转换为适用于ARM平台的镜像。本文介绍了如何配置Docker buildx环境,包括检查Docker版本、安装buildx插件、启用实验性功能及构建多平台镜像的具体步骤。通过这些操作,可以在x86平台上成功构建并运行ARM64镜像,实现跨平台的应用部署。
8770 2
|
存储 机器学习/深度学习 编解码
app版本更新的五种实现方式
app版本更新的五种实现方式
1331 2
|
应用服务中间件 网络安全 nginx
处理 WebSocket 连接失败的最佳实践
WebSocket 目前已经成为了一项极为重要的技术,其允许客户端和服务器之间进行实时、全双工的通信。然而,在实际项目中,开发者时常会遇到 WebSocket 连接失败的情况。这不仅影响了用户体验,还可能导致不可预见的系统错误或数据丢失。那么,造成 WebSocket 连接失败的原因有哪些?又该如何解决这些问题呢?本文将逐一分析常见的 WebSocket 连接失败原因,并提供详细的解决方案。
|
iOS开发
iOS应用内弹窗通知怎么实现?其实很简单,这样,这样,再这样.....你学会了么?
iOS应用内弹窗通知怎么实现?其实很简单,这样,这样,再这样.....你学会了么?
628 0
|
大数据 区块链
量化交易系统开发(策略模式案例)丨量化交易APP开发源码
综合目前数字货币市场量化交易的情况来看,目前的数字货币量化交易还处于一个相当杂乱的阶段。绝大多数的量化团队的交易行为都发生在暗处且缺乏行业规范与自律,也导致在不少项目方以及投资人的认知中出现越来越多负面的影响。
下一篇
oss云网关配置