iOS Grand Central Dispatch(GCD)

简介: 引言: GCD的全称是Grand Central Dispatch,是苹果在iOS4.0发布的一套处理并发运算方面的API.其用途是为了提高处理器多核运算的能力. GCD有点像NSOperationQueue,它们都允许程序将任务切分为多个单一任务然后提交至工作队列来并发地或者串行地执行,但GCD比之NSOpertionQueue更底层更高效。

引言:

GCD的全称是Grand Central Dispatch,是苹果在iOS4.0发布的一套处理并发运算方面的API.其用途是为了提高处理器多核运算的能力.
GCD有点像NSOperationQueue,它们都允许程序将任务切分为多个单一任务然后提交至工作队列来并发地或者串行地执行,但GCD比之NSOpertionQueue更底层更高效。



GCD的工作原理:

GCD的工作原理是让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务。
一个任务可以是一个函数(function)或者是一个block。 GCD的底层依然是用线程实现,不过这样可以让程序员不用关注实现的细节。
GCD中的FIFO队列称为dispatch queue,它可以保证先进来的任务先得到执行.



参考资料:

1:Blocks与Dispatch Queue的使用  

http://liwpk.blog.163.com/blog/static/363261702012413103111749/

2:使用GCD

http://blog.devtang.com/blog/2012/02/22/use-gcd/

3:GCD(Grand Central Dispatch)教程

http://www.dreamingwish.com/dream-2012/gcdgrand-central-dispatch%E6%95%99%E7%A8%8B.html

4:iOS中的GCD多线程模型

http://www.cnblogs.com/astin/archive/2012/08/02/2619752.html

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

http://blog.csdn.net/totogo2010/article/details/8016129


使用:


使用GCD的好处和注意事项:

1.通过使用GCD可以高效的利用处理器多核运算的能力

2.繁杂好时较长的计算任务可以通过GCD分配给其他线程来完成任务.

3.如果没有特殊需求,不应引入线程增加程序复杂度

4.谨慎对待线程阻塞.


理解Dispatch Queue(调度列队):

Dispatch Queue分为下面三种:


Serial Queue(串行队列):
Serial Queue它们各自是同步执行的(一般很少用到)


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


Main queue(主队列):
它是全局可用的serial queue,它是在应用程序主线程上执行任务的。UI层面的更新都必须通过主线程来执行,否则会出现很多无法预估的问题.





GCD的API介绍和使用场景:




dispatch_barrier_async

通过barrier分配的任务可以保证同一队列之前传进任务执行完毕以后,在执行由barrier分配的任务,当由barrier分配的任务也执行完成时,才会继续执行下一个任务.

示例代码如下:

dispatch_queue_t queue = dispatch_queue_create("wwww", DISPATCH_QUEUE_CONCURRENT);

dispatch_async(queue, ^{
    [NSThread sleepForTimeInterval:0.2];
    NSLog(@"task 1");
});
dispatch_async(queue, ^{
    [NSThread sleepForTimeInterval:0.2];
    NSLog(@"task 2");
});
dispatch_barrier_async(queue, ^{
    NSLog(@"等 task1 ,task2 执行完成以后 我才会执行");
    [NSThread sleepForTimeInterval:0.2];
});
dispatch_async(queue, ^{
    [NSThread sleepForTimeInterval:0.2];
    NSLog(@"因为在被分配时是在 barrier task 后面, 所以我会等 barrier任务执行完成我才会执行");
});
dispatch_release(queue);

执行结果:

2013-05-29 14:30:47.677 GCDDemo[4630:1b03] task 2

2013-05-29 14:30:47.677 GCDDemo[4630:1303] task 1

2013-05-29 14:30:47.679 GCDDemo[4630:1303] task1 ,task2 执行完成以后 我才会执行

2013-05-29 14:30:48.082 GCDDemo[4630:1303] 因为在被分配时是在 barrier task 后面, 所以我会等 barrier任务执行完成我才会执行


注:必须保证是在同一个队列中才会按序执行任务,如果同时存在多个队列中,将没有效果. 

多队列中的有序执行,需要用semaphore以等待,允许的方式来安排有序调度任务. 下面进入semaphore!





GCD的内存管理:

GCD的内存管理通过dispatch_retain和dispatch_release来控制变量的保留和释放.

不过在iOS 6以后 GCD内存管理可以完全交给ARC来负责.

如果你的项目需要iOS5.0,那么还是需要进行手动管理.

更多信息请参考下面的stackoverflow一问

http://stackoverflow.com/questions/8618632/does-arc-support-dispatch-queues

目录
相关文章
|
API Swift C语言
探索iOS开发:Swift中的异步编程与GCD应用
【8月更文挑战第4天】在iOS开发的海洋中,掌握Swift语言的航向是至关重要的。本文将引领你深入理解Swift中的异步编程概念,并借助Grand Central Dispatch(GCD)这一强大的工具,来简化并发编程的复杂性。我们将通过实际代码示例,展现如何在iOS应用中高效地管理后台任务和提升用户界面的响应性。
208 3
|
iOS开发 开发者 UED
iOS 中的并发编程:GCD 与 Operation 的对比与实践
【4月更文挑战第23天】 在iOS开发中,为了提高应用的性能和响应能力,理解并合理运用并发编程是至关重要的。本文将深入探讨两种主要的并发模式:Grand Central Dispatch (GCD) 和 NSOperation。我们将比较它们的优势和局限性,并通过代码示例演示如何在实际场景中应用这两种技术来优化应用性能。文章旨在为开发者提供一个清晰的指南,以便在选择适合自己项目的并发工具时做出明智的决策。
|
调度 iOS开发 开发者
iOS 中的并发编程模式:理解 GCD 和 Operation Queues
【4月更文挑战第19天】 在现代 iOS 应用开发中,有效地管理线程和并发是至关重要的。为了确保用户界面的流畅性和后台任务的高效运行,开发者需要掌握并发编程技术。本文深入探讨了两种主要的并发模式:Grand Central Dispatch (GCD) 和 Operation Queues。我们将分析它们的工作原理,比较它们的特点,并通过实际代码示例说明如何在 iOS 应用中实现高效的并发处理。通过本文,读者将获得在 iOS 平台上进行多线程开发的实用知识,以及如何根据不同的应用场景选择最合适的并发工具。
|
API 调度 iOS开发
多线程和异步编程:什么是 GCD(Grand Central Dispatch)?如何在 iOS 中使用 GCD?
多线程和异步编程:什么是 GCD(Grand Central Dispatch)?如何在 iOS 中使用 GCD?
234 1
|
安全 调度 C语言
iOS多线程之GCD-同步、异步、并发、串行、线程组、栅栏函数、信号量等全网最全的总结
iOS多线程之GCD-同步、异步、并发、串行、线程组、栅栏函数、信号量等全网最全的总结
1457 1
|
iOS开发
iOS多线程的初步研究-- dispatch同步
GCD提供两种方式支持dispatch队列同步,即dispatch组和信号量。
287 0
|
iOS开发
iOS中的多线程与GCD队列关系
iOS中的多线程与GCD队列关系
248 0
iOS中的多线程与GCD队列关系
|
存储 网络性能优化 调度
iOS-底层原理 28:GCD 之 底层原理分析
iOS-底层原理 28:GCD 之 底层原理分析
337 0
iOS-底层原理 28:GCD 之 底层原理分析
iOS-底层原理 27:GCD 之 NSThread & GCD & NSOperation
iOS-底层原理 27:GCD 之 NSThread & GCD & NSOperation
364 0

热门文章

最新文章