首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
移动开发
> 详细
ios多线程操作(四)—— GCD核心概念
时间:
2016-04-16 19:02:30
阅读:
168
评论:
0
收藏:
0
[点我收藏+]
标签:
GCD全称Grand Central Dispatch,可译为“大派发中枢调度器”,以纯C语言写成,提供了许多非常强大的函数。GCD是苹果公司为多核的并行运算提出的解决方案,它可以自动利用更多的CPU内核来参与运算,会自动管理线程的生命周
(创建线程、调度任务、销毁线程),而程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码!
GCD中有两个核心概念,一是任务,二是队列。
任务:要执行什么样的操作。任务都是预先以Block封装好准备要执行的一段代码。
队列:用来存放任务,按照先进先出的方式,调度任务在哪一条线程上执行。
GCD中有两个用来执行任务的函数,分别是同步函数和异步函数。
同步函数:该函数的代码形式如下
dispatch_sync(dispatch_queue_t queue, ^(void)block)
其中queue为队列,block为任务
同步任务并不会创建线程,但会在当前线程(可以是子线程,页可以是主线程)中执行,同步任务有一个特性,只要同步任务一添加到队列中就要马上执行,同步任务不执行完就不会执行往后的代码。
例如:
[objc]
view plain
copy
- (
void
)viewDidLoad {
[
super
viewDidLoad
];
// 获得全局队列
dispatch_queue_t q = dispatch_get_global_queue(
0
,
0
);
// 执行同步任务
dispatch_sync(q, ^{
// 让执行该任务的线程休眠2s
[NSThread
sleepForTimeInterval
:
2
.0
];
NSLog(
@"block - %@"
,[NSThread
currentThread
]);
});
NSLog(
@"viewDidLoad - %@"
,[NSThread
currentThread
]);
}
运行结果如下:
据此可以验证同步任务的特性
异步函数:
dispatch_async(dispatch_queue_t queue, ^(void)block)
一般情况下异步任务都会开启一条子线程在后台执行(有一种情况除外,后面会讲到),异步任务的一个特性就是不用等待当前线程的任务就能直接执行
例如:
[objc]
view plain
copy
- (
void
)viewDidLoad {
[
super
viewDidLoad
];
// 获得全局队列
dispatch_queue_t q = dispatch_get_global_queue(
0
,
0
);
// 执行异步任务
dispatch_async(q, ^{
//
for
(
int
i =
0
; i<
1
0
; i++) {
NSLog(
@"block - %@ - %d"
,[NSThread
currentThread
],i);
}
});
NSLog(
@"viewDidLoad - %@"
,[NSThread
currentThread
]);
}
运行结果如下:
第二次运行结果:
可以看到两次运行结果不同,且不在同一线程中.
如果将代码改为如下形式:
[objc]
view plain
copy
- (
void
)viewDidLoad {
[superviewDidLoad];
//获得全局队列
dispatch_queue_t q =dispatch_get_global_queue(
0
,
0
);
//执行异步任务
for
(
int
i =
0
; i<
1
0
; i++) {
dispatch_async(q, ^{
NSLog(
@"block - %@ - %d"
,[NSThreadcurrentThread],i);
});
}
NSLog(
@"viewDidLoad - %@"
,[NSThreadcurrentThread]);
}
执行结果如下:
由此可得队列开启多少条我们无法控制,异步函数并不会等待当前线程(当前线程为主线程)的任务。
ios多线程操作(四)—— GCD核心概念
标签:
原文地址:http://blog.csdn.net/wuwuweiweilonglong/article/details/51167184
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
关闭苹果IOS app自动更新
2021-07-29
开发一个即时通讯App
2021-07-28
iOS 跳转App Store进行评分
2021-07-26
诺基亚短信生成!太好玩了
2021-07-26
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
2021-07-26
Android系统编程入门系列之界面Activity响应丝滑的传统动画
2021-07-26
uniapp h5,app两端复制文本
2021-07-22
uni-app滚动视图容器(scroll-view)之监听上拉事件
2021-07-21
新型横向移动工具原理分析、代码分析、优缺点以及检测方案
2021-07-19
Android系统编程入门系列之界面Activity交互响应
2021-07-19
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!