浅谈GCD

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

GCD是iOS4推出的,目的是采取用来取代NSThread(iOS2.0推出)的,是C语言框架,能够自动利用更多CPU的核数,并且会自动管理线程的生命周期.

// 1.GCD的两个核心概念是:任务和队列.
任务:在block中执行的代码块
队列:用来存放任务的

队列 和 线程的区别:
队列中存放的任务最后都要由线程来执行!
队列的原则:先进先出,后进后出

队列分类:1.串行队列 2.并发队列 3.主队列 4.全局队列

串行队列:任务一个接一个的执行
并发队列:队列中的任务并发执行
主队列:跟主线程相关的队列,主队列里面的内容都会在主线程中执行
全局队列:一个特殊的并发队列

并发队列和全局队列的区别:
1.并发队列有名称,可以跟踪错误.全局队列没有.
2.在ARC中两个队列不需要考虑释放内存,但是在MRC中并发队列创造出来的需要 release 操作,而全局队列只有一个不需要.
3.一般在开发过程中我们使用全局队列

// 2.同步和异步:
同步:只能在当前线程中执行任务,不具备开启新线程的能力
异步:可以在新的线程中执行任务,具备开启新线程的能力

同步执行任务:
dispatch_sync(队列,任务)
异步执行:
dispatch_async(队列,任务)

队列和执行方式组合的效果:
1) 串行队列同步执行,既在当前线程中顺序执行
2) 串行队列异步执行,开辟一条新的线程,在该线程中顺序执行
3) 并行队列同步执行,不开辟线程,在当前线程中顺序执行
4) 并行队列异步执行,开辟多个新的线程,并且线程会重用,无序执行
5) 主队列异步执行,不开辟新的线程,顺序执行
6) 主队列同步执行,会造成死锁(’主线程’和’主队列’相互等待,卡住主线程)

// 3.线程间通讯案例:
1)子线程进行耗时操作,例如需要访问网络的下载,更新操作;主线程更新UI

dispatch_async(dispatch_get_global_queue(0, 0), ^{

         // 执行耗时的异步操作...
  dispatch_async(dispatch_get_main_queue(), ^{

        // 回到主线程,执行UI刷新操作

             }); 
       });

2)延时操作

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  // 2秒后执行这里的代码... 在哪个线程执行,跟队列类型有关 
    }); 

3) 延时操作

队列组的使用:
首先:分别异步执行两个耗时操作;
其次:等两次耗时操作都执行完毕后,再回到主线程执行操作.

使用队列组(dispatch_group_t)快速,高效的实现上述需求.

    dispatch_group_t group = dispatch_group_create(); // 队列组
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0); // 全局并发队列

    dispatch_group_async(group, queue, ^{         // 异步执行操作1
        // longTime1
    });

    dispatch_group_async(group, queue, ^{         // 异步执行操作2
        // longTime2
  });

dispatch_group_notify(group, dispatch_get_main_queue(), ^{     
// 在主线程刷新数据
    // reload Data 
  });
FreeRTOS移植实战:从零开始在STM32上搭建多任务系统(含Proteus仿真配置) 本文详细介绍了如何在STM32平台上从零开始移植FreeRTOS,并搭建多任务系统,包含Proteus仿真配置。通过环境准备、源码移植、多任务设计到仿真调试的全流程实战,帮助开发者快速掌握FreeRTOS在STM32上的应用技巧,提升嵌入式开发效率。 阅读详情

相关推荐

Tesseract OCR 字库训练教程:提高识别率进阶版

通过 Tesseract 字库训练,你可以提高 OCR 对特定文本或字体的识别能力。训练过程包括准备训练数据、生成标签文件、运行训练工具,以及将训练结果集成到实际项目中。虽然训练过程需要一些时间和精力,但对于需要高精度文本识别的场景来说,字库训练是非常有效的提升识别率的方法。

小蜗牛的珍贵百宝箱 1865

c++ 求gcd的三种完美代码

gcd(x,y)指x和y的最大公约数 三种求法分别为 位运算,高精度,优化的高精度。 int gcd(int x,int y) { while(y^=x^=y^=x%=y); return x; } int gcd(int x,int y) { while(x!=y){ if(x>y) x=x-y; else y=y-x; } return x; } int gcd(int x,int y) { while(x!=y){ while(x&1==0)x>&g

SB_zero_mark的博客 1727

从零搭建IoT数据中台:STM32+WebSocket实现边缘设备与Web端实时双向通信

本文详细介绍了如何从零搭建基于STM32和WebSocket协议的IoT数据中台,实现边缘设备与Web端的实时双向通信。通过硬件选型、协议设计、服务器搭建及安全优化,提供了一套低延迟、高并发的企业级解决方案,适用于智能农业和工业监控等场景。

tea88的博客 747

浅谈NSThread、NSOperation与GCD

浅谈NSThread、NSOperation与GCD

huangyongf的博客 566

Cisco Packet Tracert 无线路由器配置

Cisco Packet Tracert 无线路由器配置

yushan_caoyu的博客 2万+

从零开始:用YOLOv8-Pose实现实时人体姿态检测(附完整代码)

本文提供了一份从零开始的完整实战指南,详细介绍了如何使用YOLOv8-Pose构建实时人体姿态检测系统。内容涵盖环境搭建、数据准备、模型训练与调优,以及高性能部署和进阶应用开发,并附有可直接运行的代码示例,帮助开发者快速掌握Pose Estimation技术并将其应用于实际项目。

h6i7j8的博客 619

iOS GCD浅谈

1、CGD 全称 Grand Central Dispatch  2、功能: 一、调度队列:所有的调度队列都是先进先出队列,因此,队列中的任务的开始的顺序和添加到队列中的顺序相同。GCD自动的为我们提供了一些调度队列,我们也可以创建新的用于具体的目的。 二、调度资源:它是一个监视某些类型事件的对象。当这些事件发生时,它自动将一个block放入一个调度队列的执行例程中。 三、调度组:

Sunny_212319 521

【Pytorch教程】:卷积神经网络 CNN

Pytorch教程目录 Torch and Numpy 变量 (Variable) 激励函数 关系拟合(回归) 区分类型 (分类) 快速搭建法 批训练 加速神经网络训练 Optimizer优化器 卷积神经网络 CNN 目录Pytorch教程目录什么是卷积神经网络 CNN卷积 和 神经网络池化(pooling)流行的 CNN 结构CNN 卷积神经网络MNIST手写数据CNN模型训练可视化训练全部代码 什么是卷积神经网络 CNN 卷积 和 神经网络 卷积神经网络是如何运作的呢, 举一个识别图片的例子, 我们知

nanke_4869的博客 8080

iOS开发之浅谈GCD的使用

关于多线程的一些简单用法, 主要介绍GCD, 后续会有更加高级的用法, 欢迎大家来讨论.

qq247359468的专栏 445

曲线最小二乘拟合基础

介绍曲线拟合的最小二乘原理,介绍了常规最小二乘和正交最小二乘算法,最后介绍了MathNet矩阵运算库的基本操作。

yh523的博客 1302

C#与倍福TwinCAT3通信实战:ADS协议封装与设备变量读写完整源码

倍福(Beckhoff)TwinCAT3 作为工业自动化领域主流的软PLC系统,其内置的ADS(Automation Device Specification)协议是实现上位机与TwinCAT3通信的核心标准。传统ADS通信开发存在门槛高(协议细节复杂)、稳定性差(缺乏统一异常处理)、复用性低(重复编码)等问题。本文基于 C# 技术栈,聚焦“协议封装标准化、变量读写易用化、通信稳定工业化”核心需求,提供一套完整的 ADS 协议封装方案与设备变量读写源码。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1987

浅谈扩展gcd

浅谈扩展gcd 前言 有一段时间觉得扩展gcd很简单,然后不知道为什么有一段时间又觉得迷惑不清,于是现在我来重新梳理一下。 扩展gcd是什么 ax+by=gcd(a,b)ax+by=gcd(a,b)ax+by=gcd(a,b),a,ba,ba,b不完全为0,且都为非负整数。求解。 注:[][][]为向下取整的意思 求解 假设a>ba&am

beautiful_CXW的博客 937

Claude Code 100个真实案例 - 用AI绘制CAD机械图纸(工程师看了直呼内行)

本案例展示如何使用 Claude Code 配合 Python 的 `ezdxf` 库,从零开始生成专业级 CAD 机械图纸。我们将绘制一个完整的法兰盘零件图,包含主视图、俯视图、标注尺寸、粗糙度标记和标题栏,最终生成标准 DXF 文件,可直接在 AutoCAD 或 FreeCAD 中打开编辑。

yueyeguzhuo的专栏 892

iOS多线程编程——浅谈GCD

GCD对于iOS开发者来说肯定不陌生,他和NSThread,NSOperation一起作为iOS开发中主要的三种多线程实现方法,而GCD是最最底层的,所以对于作为一个iOSer,GCD是必须掌握的。

zkh90644的博客 2893

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

iOS分享【OC】—— 浅谈 GCD

dispatch_sync();是指向队列中添加 block 函数体, 这个操作相对于当前操作所在线程的其他操作,是同步的. 而 block 函数体中的执行任务方式, 是由队列的特性决定的, 如果是串行队列, 就只有一个子线程工作, 如果是并行队列, 就会有多个子线程工作.

Nothing is impossible 647

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

浅谈gcd

gcd是数论的开始,也是数论的基础, 辗转相除法求最小公因数从小学起我们就已经知道是个什么了 但是为什么辗转相除法是对的呢? 它的时间复杂度是什么呢? 这些东西直到最近我才发现(应该是我比较菜吧QAQ) 首先证明gcd的正确性: gcd(a,b)=gcd(b,a % b)(a>=b) 设gcd(a,b)=k,那么a=xk,b=yk ...

weixin_33696106的博客 175

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

GCD使用经验与技巧浅谈

前言 GCD(Grand Central Dispatch)可以说是Mac、iOS开发中的一大“利器”,本文就总结一些有关使用GCD的经验与技巧。 dispatch_once_t必须是全局或static变量 这一条算是“老生常谈”了,但我认为还是有必要强调一次,毕竟非全局或非static...

chunqingtai2922的博客 94

iOS开发之浅谈GCD的使用(二)

iOS开发之浅谈GCD的使用(二)系统提供的global队列上次说到系统给我们提供了四个队列, 分别是global队列的四种优先级. 我们打印四个优先级队列的地址, 可以看到四个优先级队列的地址是不同的, 所以这是四个不同的队列, 然后我们在同一个程序不同的地方去打印, 发现同优先级的队列的地址是相同的. 所以可以得出, 在一个程序中, 在任何地方调用dispatch_get_global_queu

qq247359468的专栏 387

浅谈欧几里德算法 GCD和LCM

首先介绍什么欧几里得算法 最大公约数问题是最早被研究的算法问题之一了,并且是ACM竞赛中能涉及到的很多数论内容,比如模线性方程,模线性方程组的基础。 欧几里得算法 (Euclidean algorithm) ,即大部分选手所知的“辗转相除法”,其核心在于不断将两数规模变小,最后实现对数时间内求解两个数的最大公约数。 其核心定理是: gcd(a,b)=gcd(b,a%b) 下面先证明这个核心定理: 证明:设a=kb+r,其中k和r分别为a除以b得到的商和余数。 则有r=a-kb成立。 设d为a

skill_Carney的博客 615
上一篇: 进驻 优快云
下一篇: IOS控件之UITextField用法及注意点
Setoge
博客等级 码龄10年 11粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值