GCD多线程之dispatch queue

浅谈GCD(Grand Central Dispatch) 一. iOS的多线程简述 1. 分类 (1) NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) (2) 以下两点是苹果专门开发的“并发”技术,使得程序员可以不再去关心线程的具体使用问题  NSOperation/NSOperationQueue 面向对象的线程技术  GCD —— Grand Central Dispatch(派发) 是基于C语言的 阅读详情

GCD之dispatch queue

iOS中多线程编程工具主要有:

•   NSThread

•  NSOperation

•  GCD

这三种方法都简单易用,各有千秋.但无疑GCD是最有诱惑力的,因为其本身是apple为多核的并行运算提出的解决方案.虽然当前移动平台用双核的不多,但不影响GCD作为多线程编程的利器(ipad2已经是双核了,这无疑是一个趋势).

http://www.cnblogs.com/scorpiozj/archive/2011/07/25/2116459.html

GCD是和block紧密相连的,所以最好先了解下block(可以查看这里).GCD是C level的函数,这意味着它也提供了C的函数指针作为参数,方便了C程序员.

下面首先来看GCD的使用:

 

dispatch_async(dispatch_queue_t queue, dispatch_block_tblock);

 

async表明异步运行,block代表的是你要做的事情,queue则是你把任务交给谁来处理了.(除了async,还有sync,delay,本文以async为例).

之所以程序中会用到多线程是因为程序往往会需要读取数据,然后更新UI.为了良好的用户体验,读取数据的操作会倾向于在后台运行,这样以避免阻塞主线程.GCD里就有三种queue来处理.

1. Main queue:

  顾名思义,运行在主线程,由dispatch_get_main_queue获得.和ui相关的就要使用Main Queue.

2.Serial quque(private dispatch queue)

  每次运行一个任务,可以添加多个,执行次序FIFO. 通常是指程序员生成的,比如:

NSDate *da = [NSDate date];

NSString *daStr = [da description];

const char *queueName = [daStr UTF8String];

dispatch_queue_t myQueue =dispatch_queue_create(queueName, NULL);

3. Concurrent queue(globaldispatch queue):

可以同时运行多个任务,每个任务的启动时间是按照加入queue的顺序,结束的顺序依赖各自的任务.使用dispatch_get_global_queue获得.

所以我们可以大致了解使用GCD的框架:

 

dispatch_async(getDataQueue,^{

    //获取数据,获得一组后,刷新UI.

    dispatch_aysnc(mainQueue, ^{

    //UI的更新需在主线程中进行

};

}

)

 

由此可见,GCD的使用非常简单,以我的使用经验来看,以后会逐步淘汰使用NSOperation而改用GCD.

 

最后感慨下,苹果为吸引开发者而将开发门槛降的非常低.以多线程编程为例,似乎还没有比iOS更容易的平台.这无疑会吸引更多的人来淘金,但无疑竞争也会异常激烈.要脱颖而出app在创意上无疑得有独到之处. 这真的是把双刃剑,吐槽下~~.

深度学习之常用算子介绍 打开 onnx 模型图,可以看到它是一个有向无环图。除了 Input、Output ,其他都是算子(是操作,而不是节点)在ONNX(Open Neural Network Exchange)模型中,除了输入和输出,其他都是算子(Operations)。算子是表示神经网络模型中的不同操作或层的元素。一个ONNX模型由一系列算子组成,通过连接这些算子来定义模型的计算流程。 阅读详情

相关推荐

新手必看:SMIC 0.18um PDK安装保姆级教程(附Cadence IC617环境配置)

本文提供SMIC 0.18um PDK在Cadence IC617环境下的详细安装教程,涵盖环境准备、文件解压、安装脚本运行、环境变量配置及Cadence集成验证等关键步骤,特别针对初学者常见问题提供解决方案,助力快速掌握芯片设计工具配置。

weixin_30522183的博客 491

OC高级编程 第3章:Grand Central Dispatch

Grand Central Dispatch(GCD)是异步执行任务的技术之一。一般将应用中记述线程管理用的代码在系统级中实现。开发者只要定义想执行的任务并追加到Dispatch Queue中,GCD就能生成必要的线程并计划执行任务。由于线程管理是作为系统的一部分来实现的,因此可统一管理,也可以执行任务,这样就比以前的线程更加有效率。也就是说GCD用简洁的记述方法,实现了极为复杂繁琐的多线程编程。上面的就是在后台线程中执行长时间处理,处理结束时,主线程使用该处理结果的源代码。

m0_73974056的博客 1178

BRAM在图像处理缓存中的实现:完整示例解析

深入讲解如何利用BRAM高效实现图像处理中的数据缓存,结合实际案例解析BRAM的应用优势与设计细节,提升系统性能。

weixin_29443363的博客 333

iOS多线程开发—GCD(二)

前言 在上一篇文章iOS多线程开发—GCD(二)中我介绍了什么是多线程,GCD与线程的关系,以及如何创建队列和简单的使用,在这篇文章中我讲重点总结一下GCD一些高级用法。 创建dispatch_queue_t需要注意的问题 我们可以通过dispatch_get_global_queue(long identifier, unsigned long flags);获取全局队列,通过dispatch_...

weixin_33676492的博客 239

AI影像组学在结直肠癌诊疗中的应用:从特征提取到临床决策

影像组学通过高通量计算从医学影像中提取定量特征,揭示肿瘤内部的微观生物学行为,这些特征反映了纹理异质性、形状不规则度等影像表型。其核心原理在于将图像数据转化为可分析的数字特征,结合机器学习算法进行模式识别,从而实现对疾病状态的精准预测。这一技术的价值在于能够无创、定量地评估肿瘤特性,为精准医疗提供关键支持。在临床实践中,AI驱动的影像组学模型广泛应用于结直肠癌的诊疗全链条,包括肿瘤良恶性鉴别、基因突变预测、治疗反应评估和预后分析等场景。通过整合影像组学特征与临床数据,可以构建预测模型,辅助医生进行更准确的诊

weixin_28295799的博客 409

VSCode+Keil高效开发STM32:Keil Assistant插件配置全攻略

本文详细介绍了如何通过VSCode的Keil Assistant插件,将Keil MDK的编译调试能力与VSCode的现代编辑体验相结合,打造高效的STM32开发环境。文章涵盖了从环境配置、工程导入、智能提示设置到与STM32CubeMX协同工作的全流程攻略,旨在解决Keil编辑器效率低下的痛点,大幅提升嵌入式开发的编码与项目管理效率。

gold的博客 507

iOS多线程之GCD——基本概念与队列(Dispatch Queue)

GCD(Grand Central Dispatch)介绍,创建管理队列,调度队列任务,长久运行

24新的起点 8678

Gromacs实战:从蛋白质-小分子对接到分子动力学模拟全流程解析

本文详细解析了使用Gromacs进行蛋白质-小分子对接和分子动力学模拟的全流程,包括文件准备、拓扑生成、复合物构建、溶剂化处理、能量最小化及平衡模拟等关键步骤。通过实战案例,帮助研究者验证药物分子与靶标蛋白的结合稳定性,提升分子动力学模拟的效率和准确性。

weixin_29216353的博客 380

iOS——【GCD】

GCD指的是Grand Central Dispatch,它是苹果公司开发的一套多线程编程技术。GCD提供了一种简单而有效的方式来管理应用程序中的并发任务。它通过将任务提交到适当的队列(串行队列或并发队列)来管理并发执行的任务,从而帮助开发者更轻松地实现并发编程,提高应用程序的性能和响应速度。上面的就是在后合线程中执行长时间处理,处理结束时,主线程使用该处理结果的源代码。这样,dispatch_async (queue, ^{ 这仅有 一行的代码表示让处理在后台线程中执行。

m0_73348697的博客 1920

JavaScript高级程序设计

作者:禅与计算机程序设计艺术 1.简介 JavaScript(简称JS)是一种直截了当、简单易用的动态脚本语言。它最初由Netscape公司的Brendan Eich(布兰登·艾奇)于1995年创建,但后来逐渐成为事实上的通用编程语言。目前,JS已经成为世界上最流行的客户端脚本语言,广泛用于网页开发、移

AI天才研究院 2266

PCL 动态半径滤波【2025最新版】

使用PCL实现的2022年最新SCI论文——【Design of Dust-Filtering Algorithms for LiDAR Sensors Using Intensity and Range Information in Off-Road Vehicles】 一文中提出用于自动驾驶点云剔除粉尘、雨雪等影响因素导致的噪声点滤波算法。

点云侠的博客 1472

IOS-12-关于GCD多线程:dispatch_async 与 dispatch_get_global_queue 的使用方法

使用GCD的一个理由就是方便。回想一下以前的多线程编程,我们会把异步调用的代码放到另外的一个函数中,并通过NSThread开启新线程来启动这段代码。 这种跳来跳去的流程对于复杂的逻辑简直就是一场灾难。更糟糕的是,调用线程时的环境对异步代码是不可见的,如果我们需要当时的临时变量的话只有两个选择: 保存到类成员变量中或者作为参数传递过去。前者会造成很多莫名奇妙的无关类成员,而后者的功能过于有限。

IOT_LI的专栏 1285

27、VXLAN BGP EVPN网络的自动化部署与运维管理

本文深入探讨了VXLAN BGP EVPN网络从初始配置到运维管理的全生命周期自动化流程,涵盖Day-0设备自动上线、Day-0.5增量变更与连接验证、Day-1覆盖服务配置与计算集成,以及Day-2监控与故障排查。详细介绍了推送与拉取两种配置模型、主流工具如Cisco VTS、NFM、DCNM的功能特点,以及开源自动化工具的应用。通过流程图和命令示例,系统展示了MAC/IP学习、BGP通告和VXLAN封装的验证方法,为构建高效、可扩展的数据中心网络提供了全面的技术指导。

banana的博客 80

iOS多线程——GCD篇

什么是GCD GCD是苹果对多线程编程做的一套新的抽象基于C语言层的API,结合Block简化了多线程的操作,使得我们对线程操作能够更加的安全高效。 在GCD出现之前Cocoa框架提供了NSObject类的 performSelectorInBackground:withObject performSelectorOnMainThread 方法来简化多线程编程技术。 GCD可以解决以下...

weixin_30832351的博客 88

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

iOS多线程开发——GCD的使用与多线程开发浅析(二)

对于iOS多线程开发,我们时刻处于学习之中,在看书中,看文档中,项目开发中,都可以去提高自己。最近刚看完了《Objective-C高级编程 iOS与OS X多线程和内存管理》这本书后,对多线程有了更为深入的理解,故在此做一个总结与记录。这本书我已经上传至网盘  https://pan.baidu.com/s/1c2fX3EC ,这本书是iOS开发者必读的书之一,写得很不错,欢迎大家下载阅读。书的封

乞力马扎罗的雪CYF的博客 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

刀哥多线程串行队列gcd-04-dispatch_queue_serial

串行队列特点 以先进先出的方式,顺序调度队列中的任务执行 无论队列中所指定的执行任务函数是同步还是异步,都会等待前一个任务执行完成后,再调度后面的任务 队列创建dispatch_queue_t queue = dispatch_queue_create("com.itheima.queue", DISPATCH_QUEUE_SERIAL);dispatch_queue_t queue = dispa

jiahao8915的专栏 1914

GCD之dispatch queue深入浅出

GCD之dispatch queue深入浅出 分类: iPhone 2014-01-22 18:28 1891人阅读 评论(0) 收藏 举报 iOS中多线程编程工具主要有:  NSThreadNSOperationGCD 这三种方法都简单易用,各有千秋.但无疑GCD是最有诱惑力的,因为其本身是apple为多核的并行运算提出的解决方案.虽然当前移动平台用双核

kfq0071的专栏 709

刀哥多线程之并发队列gcd-05-dispatch_queue_concurrent

并发队列特点 以先进先出的方式,并发调度队列中的任务执行 如果当前调度的任务是同步执行的,会等待任务执行完成后,再调度后续的任务 如果当前调度的任务是异步执行的,同时底层线程池有可用的线程资源,会再新的线程调度后续任务的执行 队列创建dispatch_queue_t queue = dispatch_queue_create("com.itheima.queue", DISPATCH_QUEUE_C

jiahao8915的专栏 2063

OC高级编程之GCD

GCD是异步执行任务的技术之一。它可以将程序中记述的线程管理用的代码在系统级中实现。GCD的线程管理是作为系统的一部分来实现的,因此可统一管理,也可执行任务,比以前的线程更有效率。//长时间处理//例如AR用画像识别//例如数据库访问//长时间处理结束,主线程使用该处理结果。//只在主线程可以执行的处理//例如用户界面更新})});可以发现,GCD使用了Blocks,进一步简化了应用程序代码。

2301_80095702的博客 1230

GCD理解-Group、Queue、Concurrent、Serial、async、sync

GCD理解GCDDispatch Queue串行队列(Serial Dispatch Queue)并发队列(Concurrent Dispatch Queue)dispatch_queue_create系统提供的Dispatch Queue为创建的Dispatch Queue创建优先级延迟执行(dispatch_after)Dispatch Groupdispatch_barrier_asyncdispatch_sync使用场景:dispatch_applydispatch_suspend/dispatch

ai_pple的博客 751

GCD之dispatch queue

iOS中多线程编程工具主要有:  NSThreadNSOperationGCD 这三种方法都简单易用,各有千秋.但无疑GCD是最有诱惑力的,因为其本身是apple为多核的并行运算提出的解决方案.虽然当前移动平台用双核的不多,但不影响GCD作为多线程编程的利器(ipad2已经是双核了,这无疑是一个趋势). http://www.cnblogs.com/scorpiozj/archive/2

shx_yi的专栏 707

<iOS>多线程GCD

iOS多线程GCD Grand Central Dispatch(GCD)是Apple开发的一个多核编程的解决方法。 dispatch queue分成以下三种: (1)运行在主线程的Main queue,通过dispatch_get_main_queue获取 __OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0) DISPA

快乐出发 398

iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用

iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用 目录(?)[+] 介绍: Grand Central Dispatch 简称(GCD)是苹果公司开发的技...

111

GCD(多线程)基本使用!!!

介绍GCD和Block一起,使得iOS多线程编程变得简单优雅许多。如此优雅简单的多线程API真希望C和C++标准中也会有 One of the technologies for starting tasks asynchronously is Grand Central Dispatch (GCD). This technology takes the thread management cod

学到老 443

iOS 多线程(四)GCD

GCD:Grand Central Dispatch(GCD) 是异步执行任务的技术之一。一般将应用程序中记述的线程管理用的代码在系统级中实现。开发者只需要定义想执行的任务并追加到适当的Dispatch Queue中,GCD就能生成必要的线程并计划执行任务。由于线程管理是作为系统的一部分来实现的,因此可以统一管理,也可执行任务,这样就比以前的线程更有效率。 Dispatch Queue “Di

奋斗的菜鸟ing 1451
上一篇: 【版本适配】iOS中文本的自适应高度
下一篇: k-v-o 扫盲
drm521
博客等级 码龄14年 9粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值