博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios多线程操作(四)—— GCD核心概念
阅读量:7164 次
发布时间:2019-06-29

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

GCD全称Grand Central Dispatch。可译为“大派发中枢调度器”,以纯C语言写成,提供了很多很强大的函数。GCD是苹果公司为多核的并行运算提出的解决方式,它能够自己主动利用很多其它的CPU内核来參与运算。会自己主动管理线程的生命周(创建线程、调度任务、销毁线程)。而程序猿仅仅须要告诉GCD想要运行什么任务,不须要编写不论什么线程管理代码!

     GCD中有两个核心概念,一是任务。二是队列。
     任务:要运行什么样的操作。任务都是预先以Block封装好准备要运行的一段代码。
     队列:用来存放任务,依照先进先出的方式,调度任务在哪一条线程上运行。
     GCD中有两个用来运行任务的函数,各自是同步函数和异步函数。

     同步函数:该函数的代码形式例如以下
dispatch_sync(dispatch_queue_t queue, ^(void)block)
  当中queue为队列,block为任务
  同步任务并不会创建线程,但会在当前线程(能够是子线程,页能够是主线程)中运行。同步任务有一个特性。仅仅要同步任务一加入到队列中就要立即运行。同步任务不运行完就不会运行往后的代码。

比如:
- (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)
  普通情况下异步任务都会开启一条子线程在后台运行(有一种情况除外。后面会讲到),异步任务的一个特性就是不用等待当前线程的任务就能直接运行
比如:
- (void)viewDidLoad {    [super viewDidLoad];    // 获得全局队列    dispatch_queue_t q = dispatch_get_global_queue(0, 0);    // 运行异步任务    dispatch_async(q, ^{        //        for (int i = 0; i<10; i++) {            NSLog(@"block - %@ - %d",[NSThread currentThread],i);        }    });    NSLog(@"viewDidLoad - %@",[NSThread currentThread]);}
执行结果例如以下:
第二次执行结果:
能够看到两次执行结果不同,且不在同一线程中.
假设将代码改为例如以下形式:
- (void)viewDidLoad {    [superviewDidLoad];    //获得全局队列    dispatch_queue_t q =dispatch_get_global_queue(0, 0);    //运行异步任务    for (int i = 0; i< 10; i++) {        dispatch_async(q, ^{            NSLog(@"block - %@ - %d",[NSThreadcurrentThread],i);        });            }    NSLog(@"viewDidLoad - %@",[NSThreadcurrentThread]);}
运行结果例如以下:
由此可得队列开启多少条我们无法控制。异步函数并不会等待当前线程(当前线程为主线程)的任务。
你可能感兴趣的文章
Mysql 分区介绍(九) —— 分区管理
查看>>
exchange2010---将邮箱置于保留挂起中---Retention Hold
查看>>
Vert.x系列(四)-- HAManager源码分析
查看>>
Java 8 中的 Streams API 详解
查看>>
搭建安全的Web服务器
查看>>
初学者
查看>>
小叙安装CentOS 6.5
查看>>
LVM 扩展/减缩/镜像 【有图有真相】
查看>>
Live Migrate 操作 - 每天5分钟玩转 OpenStack(42)
查看>>
我的友情链接
查看>>
免费为网站加上HTTPS
查看>>
银河麒麟操作系统上配置Bond(二)使用ifenslave方式
查看>>
Python高阶函数
查看>>
Xen虚拟化
查看>>
spring 数据连接池
查看>>
免软驱 安装 windows server 2003 RAID驱动 -GenerateDriverDiskISO
查看>>
tomcat 配置 字符串UTF-8 支持中文请求路径
查看>>
jstl jsp 计算相加
查看>>
spring junit使用疑问
查看>>
Protostar format2
查看>>