GCD完整版
来源:互联网 发布:淘宝怎样分期付款 编辑:程序博客网 时间:2024/06/10 04:11
GCD 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数
GCD 有同步 异步 来执行串行队列 和 并发队列
同步:在当前线程中执行任务,不具备开启新线程的能力
异步:在新的线程中执行任务,具备开启新线程的能力
并发:多个任务并发(同时)执行
串行:一个任务执行完毕后,再执行下一个任务
串行队列
dispatch_queue_create
调用函数dispatch_queue_create就行了。函数的第一个参数是一个标签,这纯是为了debug。 Apple建议我们使用倒置域名来命名队列,比如“com.dreamingwish.subsystem.task”。这些名字会在崩溃日志中被显示出 来,也可以被调试器调用,这在调试中会很有用。第二个参数目前还不支持,传入NULL就行了。
//创建一个串行队列 队列中的block按照先进先出(FIFO)的顺序去执行,实际上为单线程执行
//先进先出
//创建一个同步线程队列
dispatch_queue_t serial =dispatch_queue_create("队列1",DISPATCH_QUEUE_SERIAL);//DISPATCH_QUEUE_SERIAL同步队列
//通过异步执行这个线程队列
//把block里面执行的内容(方法)放到serial里面
dispatch_async(serial, ^{
//执行操作
for (int i=0; i<10; i++) {
NSLog(@"线程1");
}
});
dispatch_async(serial, ^{
NSLog(@"线程2");
});
//创建一个并发执行队列,block被分发到多个线程去执行
//创建并发线程队列
dispatch_queue_t concurrent =dispatch_queue_create("并发1",DISPATCH_QUEUE_CONCURRENT);
//异步执行这个并发线程队列
dispatch_async(concurrent, ^{
for (int i=0; i<10; i++) {
NSLog(@"线程3");
}
});
dispatch_async(concurrent, ^{
for (int i=0; i<10; i++) {
NSLog(@"线程4");
}
});
使用主队列(跟主线程相关联的队列)
dispatch_queue_t queue = dispatch_get_main_queue();
并发队列
GCD默认已经提供了全局的并发队列,供整个应用使用,不需要手动创建
使用dispatch_get_global_queue函数获得全局的并发队列
dispatch_queue_t dispatch_get_global_queue(dispatch_queue_priority_t priority,unsigned long flags);
第一个参数为优先级,第二个参数写0即可 日后使用的
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
//方法
});
全局队列优先级
#define DISPATCH_QUEUE_PRIORITY_HIGH 2 // 高
#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0 // 默认(中)
#define DISPATCH_QUEUE_PRIORITY_LOW (-2) // 低
#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN // 后台
同步函数不具备开启线程的能力,无论是什么队列都不会开启线程;异步函数具备开启线程的能力,开启几条线程由队列决定(串行队列只会开启一条新的线程,并发队列会开启多条线程)。
同步函数
(1)并发队列:不会开线程
(2)串行队列:不会开线程
异步函数
(1)并发队列:能开启N条线程
(2)串行队列:开启1条线程
- GCD完整版
- 完整版
- 关于GCD中单例的实现,不仅仅是 dispatch_once(视图完整版)
- gcd
- GCD
- GCD
- GCD
- GCD
- GCD
- GCD
- GCD
- GCD
- GCD
- GCD
- GCD
- gcd
- GCD
- GCD
- 贪心 1011
- VTemplate模板引擎的使用--进阶篇
- Java.作业3 看电视1
- win10中C盘权限问题导致pas不能生成头文件
- aerAelgmatceR.223
- GCD完整版
- VTemplate模板引擎的使用--高级篇
- Saas公司发展
- Problem E-1004
- TCP套接字选项
- 贪心数学公式
- CentOS6.5上python-mysql环境的安装问题解决
- java连接数据库
- mysql中把一个表的数据批量导入另一个表中