您的位置:首页 > 其它

关于GCD执行任务的理解

2015-12-23 00:00 483 查看
摘要: GCD是Apple开发的一个多核编程的解决方法。

#pragma markf - 用异步函数往并发队列中添加任务
// 创建并行队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
// 添加任务到队列中,就可以执行任务
// 异步函数:具备开启新线程的能力
// 括号内前边写的是并发队列 block是任务
dispatch_async(queue, ^{
NSLog(@"大娃----%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"二娃----%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"三娃----%@",[NSThread currentThread]);
});
NSLog(@"%@",[NSThread mainThread]);  // 打印主线程
// 总结:可以同时开启三个子线程并发加载

#pragma markf - 用异步函数往串行队列中添加任务
// 打印主线程
NSLog(@"主线程:%@",[NSThread mainThread]);
// 创建串行队列 第一个参数为串行队列的名称,是C语言的字符串
//            第二个参数为队列的属性,一般来说串行队列不需要赋值任何属性,所以通常传空值(NULL)
dispatch_queue_t queue = dispatch_queue_create("sYx", NULL);
// 添加异步任务到队列中执行
dispatch_async(queue, ^{
NSLog(@"大娃----%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"二娃----%@",[NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"三娃----%@",[NSThread currentThread]);
});
// 总结 会开启新线程,但是只开启一个线程,因为用的串行队列

#pragma markf - 用同步函数往并发队列中添加任务
//    // 打印主线程
NSLog(@"主线程:%@",[NSThread mainThread]);
// 创建并行队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
// 添加同步任务到队列中执行
dispatch_sync(queue, ^{
NSLog(@"大娃----%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"二娃----%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"三娃----%@",[NSThread currentThread]);
});
// 总结:不会开启新线程,并发队列失去了并发的功能

#pragma markf - 
3ff0
;用同步函数往串行队列中添加任务
// 打印主线程
NSLog(@"主线程:%@",[NSThread mainThread]);
// 创建串行并列
dispatch_queue_t queue = dispatch_queue_create("sYx", NULL);
// 添加同步函数到队列中执行
dispatch_sync(queue, ^{
NSLog(@"大娃----%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"二娃----%@",[NSThread currentThread]);
});
dispatch_sync(queue, ^{
NSLog(@"三娃----%@",[NSThread currentThread]);
});
// 不会开启新线程,串行加载数据

// 结论:同步函数不具备开启新子线程的能力,无论是什么队列都不会开启新线程
// 异步函数具备开启新子线程的能力,开启几条子线程由队列决定(串行队列开启一条新的子线程,并行队列会开启多条子线程)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  GCD