关于GCD
来源:互联网 发布:kako女装淘宝旗舰店 编辑:程序博客网 时间:2024/05/19 14:35
原文地址:http://ios.itmdc.com/thread-5803-1-1.html
GCD为我们提供了三种类型的调度队列(dispatch queue),分别为串行,并行和主调度队列。串行(Serial)你可以创建任意个数的串行队列,每个队列依次执行添加的任务,一个队列同一时刻只能执行一个任务(串行),但是各个队列之间不影响,可以并发执行。每个队列中的任务运行在一个由各自串行队列维护的独立线程上,一个队列中只有一个线程。
下面,我将创建一个串行队列,添加两个任务,来演示串行执行的过程。[代码]c#/cpp/oc代码:运行得到结果1:2012-05-14 18:45:01.766 GDCDemo[389:f803] taskfirst 已经加入队列
2012-05-14 18:45:01.766 GDCDemo[389:11103] taskFirst 任务开始执行
2012-05-14 18:45:01.767 GDCDemo[389:f803] tasksecond 已经加入队列
2012-05-14 18:45:01.768 GDCDemo[389:11103] taskFirst 任务结束
2012-05-14 18:45:01.768 GDCDemo[389:11103] taskSecond任务开始执行
2012-05-14 18:45:01.772 GDCDemo[389:11103] taskSecond 任务结束
运行结果跟我们的预计一样,taskFirst执行完之后,才执行taskSecond。而且,通过“xxx任务加入队列”的提示,任务运行的线程跟主线程不是同一个。
下面,我们继续对代码做点调整,让它演示不同队列之间的任务并行运行。
[代码]c#/cpp/oc代码:运行得到结果2:2012-05-14 19:07:22.951 GDCDemo[456:f803] taskfirst 已经加入队列
2012-05-14 19:07:22.951 GDCDemo[456:11103] taskFirst 任务开始执行
2012-05-14 19:07:22.953 GDCDemo[456:f803] tasksecond 已经加入队列
2012-05-14 19:07:22.953 GDCDemo[456:12c03] taskSecond任务开始执行
2012-05-14 19:07:22.954 GDCDemo[456:12c03] taskSecond 任务结束
2012-05-14 19:07:22.977 GDCDemo[456:11103] taskFirst 任务结束
由此可见,taskSecond是添加到队列后立即执行的。两个串行队列之间的任务是互不影响的。
并行(Concurrent)并行队列是不允许自己创建的,系统中存在三个不同优先级的并行队列。并行队列依旧按照任务添加的顺序启动任务,但是,后一个任务无须等待前一个任务执行完毕,而是启动第一个任务后,立即启动下一个任务。至于同一时刻允许同时运行多少个任务有系统决定。任务各自运行在并行队列为他们提供的独立线程上,并行队列中同时运行多少个任务,就必须维护多少个线程。下面,我们将上一个程序的第21到28行替换为如下代码:[代码]c#/cpp/oc代码:运行,结果与结果2相同。说明了,taskFirst和taskSecond是同时运行的。
主调度队列(main dispatch queue)主调度队列中的任务运行在应用程序主线程上,所以,如果你要修改应用程序的界面,他是唯一的选择。
演示代码如下:
dispatch_async(dispatch_get_main_queue(), ^{
.....//跟新界面的操作
});
- 关于GCD
- 关于GCD
- 关于GCD
- 关于GCD
- 关于gcd
- 关于gcd
- 关于GCD(详细)
- 关于GCD NSOperation
- 关于GCD信号量dispatch_semaphore_signal
- 【读书笔记】关于GCD
- GCD---关于iOS多线程
- 关于GCD的证明
- 高端GCD 关于GCD的拓展
- 关于GCD的8题
- 关于gcd的8题
- 关于GCD(Grand Center Dispatch)
- 关于GCD的简单认识
- 谈谈关于GCD相关问题
- Handling network configuration changes
- 中文转UTF
- 百度地图SDK for Android【简介】
- 利用ffmpeg将无命名规则的静态图片合成视频
- zookeeper 权限概述
- 关于GCD
- Java和C++的区别
- C#几种实现MD5加密
- 微软IE的HTML 组件(.htc)文件。
- conformsToProtocol:@protocol()的理解和用法
- Java编程中“为了性能”需做的26件事
- 指定log4j配置文件时启动spring web应用上下文
- 临界区,互斥量,信号量,事件的区别 .
- 关于fork()函数的作用