博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于GCD执行任务的理解
阅读量:6591 次
发布时间:2019-06-24

本文共 2223 字,大约阅读时间需要 7 分钟。

hot3.png

#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 - 用同步函数往串行队列中添加任务    // 打印主线程    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]);    });    // 不会开启新线程,串行加载数据        // 结论:同步函数不具备开启新子线程的能力,无论是什么队列都不会开启新线程    // 异步函数具备开启新子线程的能力,开启几条子线程由队列决定(串行队列开启一条新的子线程,并行队列会开启多条子线程)

转载于:https://my.oschina.net/179411601/blog/549517

你可能感兴趣的文章
第一百三十四节,JavaScript,封装库--遮罩锁屏
查看>>
【转】cookie如何共享到各个浏览器
查看>>
自制基于HMM的python中文分词器
查看>>
如何在Root的手机上开启ViewServer,使得HierachyViewer能够连接
查看>>
重写和重载
查看>>
RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-新增锁定用户与解除锁定用户的功能...
查看>>
vue1.0 的过滤器
查看>>
如何删除anaconda
查看>>
Mybatis3.3——源码阅读笔记
查看>>
oracle中的trunc函数操作
查看>>
杂牌蓝牙在2003系统使用新驱动的破解方法!
查看>>
EventCache表太大, 怎么办?
查看>>
Top 10 mistakes in Eclipse Plug-in Development
查看>>
Directx教程(23) 简单的光照模型(2)
查看>>
使用sphinx来创建文档
查看>>
[转]用了docker是否还有必要使用openstack?
查看>>
Java 并发性和多线程
查看>>
IE6下frameset横向滚动条BUG
查看>>
命令查看java的class字节码文件
查看>>
软件下载链接获取方法
查看>>