GCD
阿凡树
程序员可以毁灭,但不可被征服!
展开
-
iOS系统GCD学习(2):Dispatch Queue
GCD的基本概念就是dispatch queue。dispatch queue是一个对象,它可以接受任务,并将任务以先到先执行的顺序来执行。dispatch queue可以是并发的或串行的。并发任务会像NSOperationQueue那样基于系统负载来合适地并发进行,串行队列同一时间只执行单一任务。 GCD中有三种队列类型: 1.The main queue: 与主线程功能相同。实际上,提转载 2012-12-29 19:25:24 · 1341 阅读 · 0 评论 -
iOS系统GCD学习(11):使用串行队列实现简单的预加载
其主要思路是使用gcd创建串行队列,然后在此队列中先后执行两个任务: 1.预加载一个viewController 2.将这个viewController推入 代码如下: @implementation DWAppDelegate { dispatch_queue_t _serialQueue; UINavigationController *_n转载 2013-01-10 22:16:24 · 1093 阅读 · 0 评论 -
iOS系统GCD学习(10):常见的错误
贴几段斯坦福大学关于gcd的代码,这段代码逐步演示了如何修正错误,其中用到的既是串行队列。 1。这个是原始代码 - (void)viewWillAppear:(BOOL)animated { NSData *imageData = [FlickrFetcher imageDataForPhotoWithURLString:photo.URL]; UIImag原创 2013-01-09 23:03:44 · 1127 阅读 · 0 评论 -
iOS系统GCD学习(9):多核心的性能
概念 为了在单一进程中充分发挥多核的优势,我们有必要使用多线程技术(我们没必要去提多进程,这玩意儿和GCD没关系)。在低层,GCD全局dispatch queue仅仅是工作线程池的抽象。这些队列中的Block一旦可用,就会被dispatch到工作线程中。提交至用户队列的Block最终也会通过全局队列进入相同的工作线程池(除非你的用户队列的目标是主线程,但是为了提高运行速度,我们绝不会这么转载 2013-01-08 09:28:55 · 893 阅读 · 0 评论 -
iOS系统GCD学习(8):Dispatch Queue挂起恢复和目标指定
Dispatch Queue挂起恢复 dispatch queue可以被挂起和恢复。使用 dispatch_suspend函数来挂起,使用 dispatch_resume 函数来恢复。这两个函数的行为是如你所愿的。另外,这两个还是也可以用于dispatch source。 一个要注意的地方是,dispatch queue的挂起是block粒度的。换句话说,挂起一个queue并不转载 2013-01-06 10:27:41 · 1163 阅读 · 0 评论 -
iOS系统GCD学习(7):dispatch_once
GCD还提供单次初始化支持,这个与pthread中的函数 pthread_once 很相似。GCD提供的方式的优点在于它使用block而非函数指针,这就允许更自然的代码方式。 这个特性的主要用途是惰性单例初始化或者其他的线程安全数据共享。典型的单例初始化技术看起来像这样(线程安全的): 01 02 03 04 05 06 0原创 2013-01-05 09:53:54 · 1375 阅读 · 0 评论 -
iOS系统GCD学习(6):Dispatch Sources
何为Dispatch Sources 简单来说,dispatch source是一个监视某些类型事件的对象。当这些事件发生时,它自动将一个block放入一个dispatch queue的执行例程中。说的貌似有点不清不楚。我们到底讨论哪些事件类型? 下面是GCD 10.6.0版本支持的事件: Mach port send right state changes. Mach p转载 2013-01-02 10:21:52 · 1171 阅读 · 0 评论 -
iOS系统GCD学习(4):dispatch_group2
dispatch_apply的使用 对于同步执行,GCD提供了一个简化方法叫做dispatch_apply。这个函数调用单一block多次,并平行运算,然后等待所有运算结束,就像我们想要的那样: 1 2 3 4 5 dispatch_queue_t queue = dispatch_get_global_qeueue(DISPATCH_QUEU原创 2012-12-31 15:11:13 · 1105 阅读 · 0 评论 -
iOS系统GCD学习(5):信号量机制
当我们在处理一系列线程的时候,当数量达到一定量,在以前我们可能会选择使用NSOperationQueue来处理并发控制,但如何在GCD中快速的控制并发呢?答案就是dispatch_semaphore,对经常做unix开发的人来讲,我所介绍的内容可能就显得非常入门级了,信号量在他们的多线程开发中再平常不过了。 信号量是一个整形值并且具有一个初始计数值,并且支持两个操作:信号通知和等待。当一个信原创 2013-01-01 21:13:18 · 4771 阅读 · 0 评论 -
iOS系统GCD学习(1):介绍
什么是GCD? Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统。这建立在任务并行执行的线程池模式的基础上的。它首次发布在Mac OS X 10.6 ,iOS 4及以上也可用。它是一套低层API,提供了一种新的方法来进行并发程序编写。从基本功能上讲,GCD有点像NSOperationQueue,原创 2012-12-28 15:05:14 · 1113 阅读 · 0 评论 -
iOS系统GCD学习(3):dispatch_group
设想下面的循环: 1 2 for(id obj in array) [self doSomethingIntensiveWith:obj]; 假定 -doSomethingIntensiveWith: 是线程安全的且可以同时执行多个.一个array通常包含多个元素,这样的话,我们可以很简单地使用GCD来平行运转载 2012-12-30 11:46:17 · 1639 阅读 · 0 评论 -
iOS系统GCD学习(12):IO资源竞争
概述 我将分四步来带大家研究研究程序的并发计算。第一步是基本的串行程序,然后使用GCD把它并行计算化。如果你想顺着步骤来尝试这些程序的话,可以下载源码。注意,别运行imagegcd2.m,这是个反面教材。。 原始程序 我们的程序只是简单地遍历~/Pictures然后生成缩略图。这个程序是个命令行程序,没有图形界面(尽管是使用Cocoa开发库的),主函数如下: intmain(i转载 2013-01-12 12:07:55 · 1048 阅读 · 0 评论