苹果多线程GCD

iOS开发之多线程 iOS开发之多线程本文章博主和大家一块学习多线程,很自然就涉及到线程和进程,然后涵括NSThread、GCD、NSOperation!然后就是最牛叉的RunLoop和Runtime。一、线程与进程进程是指在系统中正在运行的一个应用程序,就是一段程序的执行过程,每个进程之间是相互独立的。一个进程要想执行任务,必须要有线程,至少有一条线程,一个进程的所有任务都是在线程中执行。其实应用程序启动的时候我么你 阅读详情

总结

            GCD的全称是Grand Central Dispatch,GCD  为了替代NSThread,充分利用苹果设备的多核设备,生命周期自动管理,是纯C语言,提供了非常直观和用户理解和习惯的函数,用DISPATCH_QUEUE_SERIAL,和 DISPATCH_QUEUE_CONCURRENT 控制串行和并行,用sync和async控制同步和异步。

1.基本使用

 //串行队列创建  DISPATCH_QUEUE_SERIAL
 dispatch_queue_t serial = 
 dispatch_queue_create("serial", DISPATCH_QUEUE_SERIAL);

 //并行队列创建 DISPATCH_QUEUE_CONCURRENT
 dispatch_queue_t concurrent =
 dispatch_queue_create("concurrent", DISPATCH_QUEUE_CONCURRENT);
    
 //同步
 dispatch_sync(serial/concurrent , ^{
         
 });

 异步
 dispatch_async(serial/concurrent, ^{
            
 });

       




      GCD的线程代码在表达串行,并行,同步,异步,代码结构清晰,层次分明,非常贴近,我们对变量控制的理解。

2.特殊函数使用

   2.1 栅栏函数之前的执行完毕之后,执行栅栏函数,然后在执行栅栏函数之后的

dispatch_barrier_async(concurrent, ^{
           NSLog(@"我是一个栅栏函数");
});

   2.2 延迟

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 
(int64_t)(2*NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        NSLog(@"after  %@",[NSThread currentThread]);
});

   2.3 onceToken记录代码是否被执行过,通常用来写单例

static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    NSLog(@"执行一次");
});

    2.4 快速迭代:开启多条线程,并发执行,比普通的循环快

 dispatch_apply(10, dispatch_get_global_queue(0, 0), ^(size_t index) {
        NSLog(@"%zu",index);
 });

2.group使用

dispatch_group_t group = dispatch_group_create();

    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    
    dispatch_group_async(group, queue, ^{
        NSLog(@"下载照片一");
    });
    dispatch_group_async(group, queue, ^{
        NSLog(@"下载照片二");
    });
    
    dispatch_group_notify(group, queue, ^{
        NSLog(@"照片一和照片二合成一张照片");
    });

3.死锁

//在UI线程中

dispatch_queue_t queue = dispatch_get_main_queue();
    
NSLog(@"task1-%@",[NSThread currentThread]);
    
dispatch_sync(queue, ^{
     NSLog(@"task2-%@",[NSThread currentThread]);
});

NSLog(@"task3-%@",[NSThread currentThread]);

      task1是在主线程中执行,而主线程是串行队列,定义的queue队列也是主队列, dispatch_sync是同步执行的标志,意思是必须等待block返回,才能执行task3,而当前主队列中正在被task1执行,必须等待完成task3完成后才能释放,这就造成了task3等待block完成返回,block等待task3完成释放主队列而相互等待的循环中死锁

4.一些容易混淆的点

    同步 并发 串行:  都是没有开启新线程,都是串行执行任务,因为要和主线程同步

   穿行任务不一定只在一个线程中执行,并发的任务不一定在多个线程中,任务和线程不是一一绑     定执行的关系,而取决于线程池和CPU的调度。

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

相关推荐

视觉辅助RIS波束追踪:用摄像头“看见”用户,实现毫秒级波束对准

在无线通信领域,波束成形技术是提升高频段信号覆盖与质量的核心手段,其原理是通过调整天线阵列的相位,使信号能量在特定方向相干叠加,形成高增益定向波束。这项技术的价值在于能有效克服高频信号路径损耗大、穿透性差的瓶颈,广泛应用于5G/6G、毫米波通信及室内定位等场景。然而,传统波束追踪依赖信道估计或波束扫描,存在训练开销大、实时性差的问题。本文聚焦于一种创新解决方案:将计算机视觉与可重构智能表面(RIS)相结合。通过摄像头直接感知用户位置,并利用RIS快速重构反射波束方向,实现了近乎零开销、毫秒级延迟的波束追踪,

weixin_33552698的博客 620

iOS GCD的基本使用

简而言之,就是 创建任务--创建对列-->把任务放到对列里.同步执行(sync)和异步执行(async)。串行对列,并行对列(注意:并行对列并不是说有多个对列并行,不管串行对列还是并行对列,都只有一个对列,对列里放的任务是串行的,叫串行对列,对列里放的任务是并行的,叫并行对列)所以理论上任务和对列有4种组合方案:1.串行对列里添加同步任务;2.串行对列里添加异步任务;3.并行对列里添加同步任务;

wyz670083956的博客 1831

Zynq UltraScale+ MPSoC-AMP(linux+裸机)

接着 Zynq UltraScale+ MPSoC-双核裸机AMP继续 平台工具:zcu106,vitis2020.2,petalinux2019.2 文章目录1.cpu1跑裸机2.cpu0跑linux2.1petalinux设置2.2 app3.生成BOOT.bin4.zcu106测试 1.cpu1跑裸机 参照Zynq UltraScale+ MPSoC-双核裸机AMP建立的工程进行修改。BSP中stdin与out修改为uart1,uart1给裸机用,uart0给linux用。 ddr空间裸机与linu

zhuxl24的博客 5195

iOS——【GCD】

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

m0_73348697的博客 1920

Flutter 直接调用so动态库,或调用C/C++源文件内函数

我把 .so 文件尝试放过好几个目录/lib/,最终都会报这个错误,现在才知道库文件需要放在你根本想象不到的地方!!!尝试了一些方法还是不行后我放弃了 ffi,想着用 Flutter 的 MethodChannel 桥接 android/ios 原生,再让原生去调 native 层。一顿操作把Android端的搞定了,当然中间涉及到 Kotlin和C++ 层的数据类型映射的痛苦,而且业务函数也不像一个 helloworld 那么简单,别提有多痛苦了。

开发以大橘为重 8350

C#计算八字

private string[] jq = { "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至" };private string[] dz = { "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥", "子" };

m0_72939038的博客 827

【iOS】GCD

iOS开发中较为常用的多线程编程技术——GCD。学习了任务、队列、同步与异步、串行与并行的理解,以及GCD各种APIAPI的应用

XY_Mckevince的博客 1311

OpenEarthMap 与 xBD 数据集合并

整合好的数据:链接: https://pan.baidu.com/s/1uJ_Zg6n-s3u1D49OW52D7Q?pwd=2vwx 提取码: 2vwx完整整合步骤与代码如下。

qq_60293814的博客 1593

iOS-底层原理 27:Block底层原理

本文主要介绍block的类型、循环引用的解决方法以及block底层的分析 block 类型 block主要有三种类型 __NSGlobalBlock__:全局block,存储在全局区 void(^block)(void) = ^{ NSLog(@"CJL"); }; NSLog(@"%@", block); 此时的block无参也无返回值,属于全局block image __NSMallocBlock__:堆区block,因为block既是函数,也是对象 int

changcongcong_ios的博客 445

HWSD2.0土壤数据处理实战:从下载到属性提取全流程解析

本文详细解析了HWSD2.0全球土壤数据库从数据下载、属性筛选到GIS空间连接与提取的全流程实战方法。重点介绍了如何利用ArcGIS Pro等工具,将土壤单元编码与黏粒含量等属性表关联,最终生成全球土壤属性专题栅格图,为农业规划与生态研究提供关键数据支撑。

weixin_29214691的博客 610

写一个b站爬虫(思路)

part 0 安装 scrapy, requests part 1 信息获取 打开番剧索引链接(https://www.bilibili.com/anime/index/) F12控制台,选中NETWORK,来到xhr文件,我们可以找到了存放番剧json的地方

kou的博客 484

ios开发之多线程GCD

简介GCD(Grand Central Dispatch)纯C语言编写,提供非常强大的函数,是目前苹果官方网推荐的多线程开发方法,NSOperation便是基于GCD的封装。 GCD的优势1.GCD是苹果公司为多核的并行运算提供了解决方案 2.GCD会自动利用更多的CPU内核(比如:双核、四核) 3.GCD自动管理线程的生命周期(创建线程、跳读任务、销毁线程) 4.程序员只需要告诉GCD想要执行什么

AAJUNWANG的博客 681

基于深度学习的AI生成式人脸图像鉴别

AIGC(AI内容生成)技术的快速发展确实为创作者提供了高效生产力工具,但同时也引发了一些问题和挑战。这些技术可以生成以假乱真的图像、视频换脸等,给不法分子提供了滥用的机会。其中,一些不法分子可能利用AIGC技术制造虚假新闻、违反版权、绕过活体身份验证、散布谣言和诽谤他人、进行敲诈勒索等非法活动,以谋取不当利益。这些行为给社会造成了严重的负面影响,破坏了信息的真实性和可信度。因此,我们需要认识到AIGC技术的潜在风险,并采取相应的措施来应对。

mingo_敏 4494

苹果多线程网络编程之-GCD队列与任务的理解

今天就 iOS 的多线程 GCD 的使用做了一些总结和理解。     GCD,Grand Central Dispatch,是Apple开发的一个多核编程的解决方法。    GCD其实就是创建/获取一个队列,在 Block 块或方法(函数)里写需要执行的任务代码块,然后将任务放到合适的队列里执行。GCD队列呢,分三种:主队列(串行队列)、全局队列(并行队列)、自定义队列(自定义)。任务执行方法

ZhongLv_HoneyMoon的博客 1375

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

光速道路:iOS多线程之『GCD』详尽总结

Grand Central Dispatch(GCD)是苹果为iOS提供的一套强大的多线程编程接口,可以让我们以极高的效率处理并发任务。在编程的旅程中,GCD是我们的得力助手,它帮助我们有效地管理线程,使我们的应用运行得更加流畅。这是因为我们试图在主队列中同步执行一个任务,但主队列已经在执行一个任务(也就是我们的代码本身),因此我们的任务会被阻塞,导致死锁。:如果有一组相关的任务,我们可以使用调度组来管理它们,使我们的代码更加清晰。:主队列负责UI的更新,如果在主队列中执行耗时任务,会导致UI变得不流畅。

good7ob的博客 295

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

apple平台下的objc的GCD,多线程编程就是优雅自然。

在apple的操作系统平台里,GCD使得多线程编程是那么的优雅自然。在传统的多线程编程中,首先要写线程处理循环;之后还有事件队列,消息队列;还要在线程循环中分离事件解释消息,分派处理;还要考虑线程间是否要同步;还要写许多有着可能费解的函数名的回调处理程序,注册回调程序,而且代码分散即使同一文件也不容易看出与哪些线程对应或者彼此间的是否有次序或并发的关系,不利于调试;另外还要考虑是否需要使用线程池,...

weixin_30587927的博客 88

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

GCD简单使用

GCD是苹果封装的c语言级别的多线程机制 1. 在主线程上异步执行一段代码 dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"%@",[NSThread currentThread]); }); 2. 在主线程上同步执行一段代码 dispatch_sync(dispatch_get_mai

穿云剑 460

iOS —— 多线程GCD

一、什么是 GCD 1. GCD 是苹果为解决多线程而定义的一套库,并且 GCD 可以自动管理线程的生命周期,就和 ARC 类似,不需要我们手动去管理 2. GCD 是用 纯C 语言 写的,所以我门使用的是 GCD 中的函数,并不是面向对象的方法 3. GCD 核心概念   1)任务 : 就是某个线程要执行的方法   2)队列 : 存放所有的任务 4. GCD 使用步骤...

along1313的博客 195

IOS 多线程初探(三) - GCD

这次来介绍下苹果主推的多线程使用方式,GCD。GCD全称是Grand Central Dispatch。该多线程机制性能很好。GCD声明了一系列dispatch开头的方法来实现多线程操作,dispatch方法中提供了一个Block回调来处理线程的任务。先来看一个实例:- (void)function { dispatch_queue_t queue = dispatch_get_global

Koptop的博客 671

IOS_多线程

苹果的Cocoa框架支持的

清雨小竹 1178

iOS多线程实现3-GCD

原文链接:http://www.cnblogs.com/mddblog/p/4767559.html     敲下gcd三个字母,搜狗第一条显示居然是“滚床单” ^_^ 一、介绍   GCD,英文全称是Grand Central Dispatch(功能强悍的中央调度器),基于C语言编写的一套多线程开发机制,因此使用时会以函数形式出现,且大部分函数以dispatch开头,虽然是C语言...

weixin_30407099的博客 108

[面试时]我是如何讲清楚GCD的

1、概述 GCD是苹果引入的多线程编程技术方案,原名“Grand Central Dispatch”,在GCD之前,已经出现了NSThread、NSOperationQueue,两项多线程解决方案,其对比如下: - GCD NSOperatinQueue NSThread 解析 基于C语言框架,充分利用多核,苹果推荐的多线程技术 面向对象多线程编程 轻量级多线程编程,

shawjan的专栏 2344

GCD

GCD GCD,全名Grand Central Dispatch,中文名郭草地,是基于C语言的一套多线程开发API,一听名字就是个狠角色,也是目前苹果官方推荐的多线程开发方式。可以说是使用方便,又不失逼格。总体来说,他解决我提到的上面直接操作线程带来的难题,它自动帮你管理了线程的生命周期以及任务的执行规则。下面我们会频繁的说道一个词,那就是任务,说白了,任务其实就是你要执行的那段代码。 任务管理方...

科技区软件类AI博主 🔍 专注 AI 工具测评 / 前沿产品深度拆解 / 行业趋势预判 🚫 拒绝科技玄学,只讲人话干货 —— 从工具使用到商业落地,搭建可复用的 AI 应用框架 70

iOS多线程系列(3)GCD(Grand Central Dispatch)

在2011的WWDC上,苹果推出了GCD,从此多线程增加了一种新的方法。GCD要求运行在iOS4.0版本以上或者OS X10.6版本以上。GCD是Grand Central Dispatch的缩写,是一组用于实现并发编程的C接口。GCD是基于Objective-C的Block的特性开发的,基本的业务逻辑和NSOperation很像。都是添加一个任务到一个队列,由系统来负责线程的生成和调度。因为直接

objectively的专栏 703

不要再坑人啦!NSOperation才是苹果推荐使用的多线程技术!

首先声明一下。小汤我在实际开发中呢,实际上也是喜欢用GCD多一点,由于用起来感觉更方便。 可是,事实是什么呢? 苹果推荐使用的实际上是NSOperation。所以希望对此没有研究的各位不要再在博客中误导他人了啊。 再换句话来说。苹果开发使用的Objective-C语言就是面向对象的,她怎么可能推荐大家使用基于C语言的面向过程开发的东西呢? (这句话仅仅是吐槽,请...

aofan9566的博客 73

线程 GCD (第一种)

GCD : Grand Central Dispatch 大中央调度 , 是苹果最推崇的多线程管理策略 , 是通过队列对多线程进行管理的 第一种队列 主调队列 , 在主线程中执行 , 并且是串行 (一次只能操作一个) dispat...

chixia3134的博客 75
上一篇: Sublime Text 3 修改字体颜色
下一篇: gl-Camera
Stan_Shi
博客等级 码龄9年 4粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值