GCD使用01

算法笔记01|欧几里得GCD算法(附C++代码) 目录前言一、欧几里得GCD定理二、欧几里得GCD算法1. 算法思想2. 算法伪代码3. 算法复杂度4. 算法代码(c++)三、写在后面 前言 最大公约数(GCD,Greatest Common Divisor)问题,即求两个或多个整数共有约数中最大的一个。 求取两个数GCD的直观方法——整数的因子分解法    即将每个整数分解为素因子的积,找出公共的素因子,他们的积即是GCD。    例如:210=2x3x5x7; 252=2x2x3x3x7; 公共素因子为2x3x7=42,所以210和252 阅读详情

本文由http://blog.youkuaiyun.com/totogo2010/原创,

介绍:

Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统。这建立在任务并行执行的线程池模式的基础上的。它首次发布在Mac OS X 10.6 ,iOS 4及以上也可用。

设计:

GCD的工作原理是:让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务。

一个任务可以是一个函数(function)或者是一个block。 GCD的底层依然是用线程实现,不过这样可以让程序员不用关注实现的细节。

GCD中的FIFO队列称为dispatch queue,它可以保证先进来的任务先得到执行
dispatch queue分为下面三种:

Serial      

又称为private dispatch queues,同时只执行一个任务。Serial queue通常用于同步访问特定的资源或数据。当你创建多个Serial queue时,虽然它们各自是同步执行的,但Serial queue与Serial queue之间是并发执行的。

Concurrent

又称为global dispatch queue,可以并发地执行多个任务,但是执行完成的顺序是随机的。

Main dispatch queue

它是全局可用的serial queue,它是在应用程序主线程上执行任务的。

我们看看dispatch queue如何使用

1、常用的方法dispatch_async

为了避免界面在处理耗时的操作时卡死,比如读取网络数据,IO,数据库读写等,我们会在另外一个线程中处理这些操作,然后通知主线程更新界面。

用GCD实现这个流程的操作比前面介绍的NSThread  NSOperation的方法都要简单。代码框架结构如下:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    // 耗时的操作
    dispatch_async(dispatch_get_main_queue(), ^{
        // 更新界面
    });
});

如果这样还不清晰的话,那我们还是用上两篇博客中的下载图片为例子,代码如下:

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSURL * url = [NSURL URLWithString:@"http://avatar.youkuaiyun.com/2/C/D/1_totogo2010.jpg"];
        NSData * data = [[NSData alloc]initWithContentsOfURL:url];
        UIImage *image = [[UIImage alloc]initWithData:data];
        if (data != nil) {
            dispatch_async(dispatch_get_main_queue(), ^{
                self.imageView.image = image;
             });
        }
    });

是不是代码比NSThread  NSOperation简洁很多,而且GCD会自动根据任务在多核处理器上分配资源,优化程序。 系统给每一个应用程序提供了三个concurrent dispatch queues。这三个并发调度队列是全局的,它们只有优先级的不同。因为是全局的,我们不需要去创建。我们只需要通过使用函数dispath_get_global_queue去得到队列,如下:

dispatch_queue_t globalQ = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);  


这里也用到了系统默认就有一个串行队列main_queue

dispatch_queue_t mainQ = dispatch_get_main_queue(); 

虽然dispatch queue是引用计数的对象,但是以上两个都是全局的队列,不用retain或release。

2、dispatch_group_async的使用

dispatch_group_async可以实现监听一组任务是否完成,完成后得到通知执行其他的操作。这个方法很有用,比如你执行三个下载任务,当三个任务都下载完成后你才通知界面说完成的了。下面是一段例子代码:

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_group_t group = dispatch_group_create();
    dispatch_group_async(group, queue, ^{
        [NSThread sleepForTimeInterval:1];
        NSLog(@"group1");
    });
    dispatch_group_async(group, queue, ^{
        [NSThread sleepForTimeInterval:2];
        NSLog(@"group2");
    });
    dispatch_group_async(group, queue, ^{
        [NSThread sleepForTimeInterval:3];
        NSLog(@"group3");
    });
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        NSLog(@"updateUi");
    });
    dispatch_release(group);

dispatch_group_async是异步的方法,运行后可以看到打印结果:

2012-09-25 16:04:16.737 gcdTest[43328:11303] group1
2012-09-25 16:04:17.738 gcdTest[43328:12a1b] group2
2012-09-25 16:04:18.738 gcdTest[43328:13003] group3
2012-09-25 16:04:18.739 gcdTest[43328:f803] updateUi

每个一秒打印一个,当第三个任务执行后,upadteUi被打印。

3、dispatch_barrier_async的使用

dispatch_barrier_async是在前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行

例子代码如下:

    dispatch_queue_t queue = dispatch_queue_create("gcdtest.rongfzh.yc", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queue, ^{
        [NSThread sleepForTimeInterval:2];
        NSLog(@"dispatch_async1");
    });
    dispatch_async(queue, ^{
        [NSThread sleepForTimeInterval:4];
        NSLog(@"dispatch_async2");
    });
    dispatch_barrier_async(queue, ^{
        NSLog(@"dispatch_barrier_async");
        [NSThread sleepForTimeInterval:4];

    });
    dispatch_async(queue, ^{
        [NSThread sleepForTimeInterval:1];
        NSLog(@"dispatch_async3");
    });

打印结果:

2012-09-25 16:20:33.967 gcdTest[45547:11203] dispatch_async1

2012-09-25 16:20:35.967 gcdTest[45547:11303] dispatch_async2

2012-09-25 16:20:35.967 gcdTest[45547:11303] dispatch_barrier_async

2012-09-25 16:20:40.970 gcdTest[45547:11303] dispatch_async3

请注意执行的时间,可以看到执行的顺序如上所述。

4、dispatch_apply 

执行某个代码片段N次。
dispatch_apply(5, globalQ, ^(size_t index) {
    // 执行5次
});



鼎捷GDC客户端配置 一、 GDC客户端可以用客户端登陆,也可以网页方式登陆。 网页方式登陆可以理解为取代了ie浏览器,直接以gdc为浏览器执行网页登陆 立即下载

相关推荐

【Python&RS】哨兵2号(Sentinel2)轨道条带说明+图幅统计(表格+矢量)

今天给大家带来哨兵2号的图幅编号介绍以及全国省、市所需图幅数的统计。网上教程极少,而且结果也不公开。因为每次下载的时候都不知道需要几幅,所以研究后给大家分享一下。

Remote Sensing迷途小书童 1681

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

介绍: Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统。这建立在任务并行执行的线程池模式的基础上的。它首次发布在Mac OS X 10.6 ,iOS 4及以上也可用。 设计: GCD的工作原理是:让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务。 一个任务可以是一个...

移动开发记录 296

基于Simulink的防空导弹六自由度弹道建模与仿真实战

本文详细介绍了基于Simulink的防空导弹六自由度弹道建模与仿真方法。通过分析导弹动力学原理、Simulink环境配置、气动力建模、推进与控制系统设计等关键环节,提供了一套完整的实战指南。文章特别强调了六自由度模型在防空导弹仿真中的重要性,并分享了常见问题排查与优化建议,为相关领域工程师提供实用参考。

apple5的专栏 868

GDC图像显示控制Graphic display control

GDC的功能包含但不限于: 1.图像变换:GDC可调整视频、消除鱼眼失真以提供更好的观看体验.如汽车的抬头显示 2.图像拼接:GDC具有多路视频输入和高速图像处理能力,从而无需外接FPGA来实现这些功能。在GDC内包含3D渲染能力就允许将这些拼接的图像映射到一个碗状表面,从而能全方位显示车辆周围的一个真实、无失真、360度的全景视图 3.图像投影:去畸变+2D坐标变化+拼接 嵌入式高...

cy413026的博客 2700

主流 AI 插件 之一的 Copilot 介绍

Copilot 是微软推出的一款人工智能助手,旨在通过自然语言交互帮助您提升工作效率和创造力,覆盖多平台,提供智能问答、内容生成、代码辅助等功能。其核心定位为“日常 AI 伴侣”,旨在通过自然语言交互提升工作与生活效率。

u014695938的博客 6901

深入Android构建系统:一次修改ro.vendor.build.fingerprint失败的排查与解决记录

本文深入探讨了Android构建系统中修改ro.vendor.build.fingerprint的完整解决方案。通过分析vendor分区的特殊地位和构建指纹的生成路径,提供了三种实战修改方法,并揭示了指纹修改可能遇到的陷阱与对策,帮助开发者彻底解决这一常见问题。

weixin_30621711的博客 144

gdc函数(最大公约数)

public int gdc(int a,int b){ return b != 0 ? gdc(b,a%b):a; }

qq_54494937的博客 711

Python爬虫实战:5分钟搞定微信公众号文章阅读数、点赞数抓取(附完整代码)

本文详细介绍了如何通过Python爬虫技术自动化抓取微信公众号文章的阅读数和点赞数。文章从数据源分析入手,分步讲解了获取文章列表与提取单篇统计数据的完整流程,并提供了应对平台风控的策略与工程化整合方案,帮助开发者高效、合规地完成数据采集任务。

ansible6ops的博客 1336

医学图像处理之GDC数据库

医学图像处理之GDC数据库

weixin_45958695的博客 4615

本地部署了qwen2.5:0.8b ,对接openclaw 后,电脑卡的要死

OpenClaw 强制 16k 上下文 + 无限历史 + Agent 调度,把 0.8b 压垮。按上面配置:轻量化 + 限历史 + 驻留显存,电脑立刻不卡。

专注于技术研发行业技术主要有AI人工智能视觉识别、物联网技术、电商平台、app原生技术、微信小程序、鸿蒙语言开发、办公企业oa、ERP等,致力于做东半球最优秀的程序员 978

Mac版Burp Suite专业版破解与汉化完整指南

在Web安全测试领域,Java应用程序的许可证验证机制与本地化实现是常见的技术课题。其原理通常涉及Java Agent技术,通过在JVM启动时动态修改字节码,实现对软件授权状态的校验逻辑进行拦截与重写,从而绕过官方验证。同时,软件界面的国际化(i18n)与本地化(l10n)则依赖于资源文件的替换与加载。从技术价值角度看,深入理解这些机制不仅能满足特定场景下的工具定制需求,更能加深对Java安全机制、软件保护与逆向工程的理解。在实际的工程实践中,安全研究人员与开发者常面临功能受限或语言障碍的挑战,尤其是在渗透

weixin_29327525的博客 1046

GDC的两种含义 (Graphic display control 主要是3D 功能)/(Geometrical Distortion Correction)

1.图形显示控制 解密图像显示控制器的3D功能 车辆导航和娱乐系统中的GDC控制器应用 以下转自http://www.21icpay.com/article/app/200904/2693_2.html 图形显示控制器(GDC)是位于车辆信息和娱乐系统中心的关键引擎,通常这些信息娱乐系统包括需要各类人机接口的头端单元和全配置的各种仪器。开始为日本和欧洲市场上的高端车辆中的导航系统设计的图...

cy413026的博客 8170

ZYNQ 网络通信的四种实现方案

一,ZYNQ MIO以RGMII 接口连接外部PHY芯片实现LWIP网络通信。 二,ZYNQ PS 的 ENET0/ENET1 通过 EMIO 的方式扩展至 PL,在 PL 中通过 RGMII 接口连接扩展子卡实现 LWIP 网络通信。 在PL中搭建了1个AXI 1G/2.5G Ethernet Subsystem以及1个AXI Direct Memory Access IP 核。这两个 IP核均通过AXI 总线经S_AXI_HP0 口与PS 连接,PS 通过AXI 总线对其进行配置和控..

wangjie36的博客 1万+

HDU 5656 CA Loves GCD 01背包+gcd

题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5656 bc:http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=683&pid=1002 CA Loves GCD  Accepts: 64    Submissions: 535  Time Li

c_czl的博客 263

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

efm32 入门.pdf

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

嵌入式燃气灶选购指南:从5.2kW火力到安全清洁的全面解析

嵌入式燃气灶作为现代厨房系统的核心组件,其选购远不止关注热负荷(如5.2kW)这一参数。理解其工作原理,需从燃烧效率与系统集成入手。高热效率(如一级能效≥63%)意味着更充分的燃气利用与长期节能,其价值体现在降低使用成本与提升热效能。技术实现上,高效的燃烧器设计(如螺旋稳焰)与聚能锅架是关键。从应用场景看,嵌入式设计要求精准的安装适配(如开孔尺寸匹配)与台下空间管理,这直接关系到安全通风与管线布置。同时,易清洁设计(如可拆卸炉头、钢化玻璃面板)与多重安全防护(熄火保护、童锁)是保障长期使用体验与安全的工程实

weixin_34168880的博客 369

VB摄像头监控

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

GCD研究01

简介全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核、四核 GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程) 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 任务和队列 任务:执行什么操作任务执行函数(任务

no pain !no gain ! 351

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...

GCD-01(基本使用)

- (void)viewDidLoad { [super viewDidLoad]; //GCD: Grand Central Dispatch 牛逼的中枢调度器 //纯C语言, 提供了非常多强大的函数;自动管理线程的生命周期;苹果推荐 //GCD中两个核心概念 //1.任务:执行什么操作 //2.队列:用来存放任务 ...

weixin_30263277的博客 220

01-chisel-tutorial代码学习之GCD

chisel-tutorial代码学习 - 011. chisel-tutorial初介绍2. chisel-tutorial代码库的文件结构3. chisel代码初体验: GCD.scala4. chisel的testbench5. 运行chisel仿真功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图

beetnt的博客 675

【01背包】HDU5656CA Loves GCD

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5656 Problem Description CA is a fine comrade who loves the party and people; inevitably she loves GCD (greatest common divisor) too.  Now, ther

wlxsq的专栏 690

IOS Dev Intro - GCD Series 01

https://www.raywenderlich.com/60749/grand-central-dispatch-in-depth-part-1 Update note: Check out our updated version of this Grand Central Dispatch tutorial in Swift and running on iOS 8

fanbird2008的专栏 1214

ios开发进阶之多线程01 线程 GCD

一 多线程基础 什么是进程?进程是指在系统中正在运行的一个应用程序。 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内。 什么是线程?1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程)。 1个线程中任务的执行是串行的(执行完上一个才能执行下一个)。 什么是多线程?1个进程中可以开启多条线程,多条线程可以并行(同时)执行不同的任务。 线程可以并行, 但是每个线程中的任务还

IOS开发进阶之路 653

GCD全解-01-dispatch-iOS系统调度

dispatch_queue help both the system and your application to run faster, more efficiently, and with improved responsiveness. Grand Central Dispatch (GCD) comprises language features, runtime libra...

zhuge1127的博客 825

CodeForces - 482D Kuro and GCD and XOR and SUM(01字典树)

链接:CodeForces - 482D Kuro and GCD and XOR and SUM 题意: 给一个空的集合aaa,共有q  (2≤q≤105)q\;(2\le q\le 10^5)q(2≤q≤105)次操作,分为以下222种操作 1  ui1\;u_i1ui​:将uiu_iui​加入到集合aaa中&ThickSpac...

Plus Ultra! 292

牛客周赛 Round 105(小苯的xor构造/小苯的权值计算/小苯的01矩阵构造/小苯的重排构造/小苯的xor图/小苯的前缀gcd构造)

建立每个数的所有因数的查找表a[51],其中a[i]存储了i的所有因数(从大到小排列)的分布,确保差值最大化,再通过交替输出剩余元素满足最小差值条件。多举一些样例就可以看出k 为奇数时不存在。用于将除法转换为乘法,满足模运算性质。该算法通过贪心策略优先处理。遍历输入数组,分别统计。

2401_88124440的博客 1058

CodeForces 979 D.Kuro and GCD and XOR and SUM (01字典树*n)

D.Kuro and GCD and XOR and SUM Kuro is currently playing an educational game about numbers. The game focuses on the greatest common divisor (GCD), the XOR value, and the sum of two numbers. Kuro loves...

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 194
上一篇: block内存管理
下一篇: xib原理
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值