多线程:GCD笔记整理

[TOC]

GCD 简介

全称Grand Central Dispatch,可译为“牛逼的中枢调度器”。

GCD 优势

  • GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程)
  • GCD是苹果公司为多核的并行运算提出的解决方案
  • GCD会自动利用更多的CPU内核(比如双核、四核)
  • 程序员只需要告诉GCD想要执行什么任务,不需要编写任何管理线程代码

GCD的底层实现

主要有Dispatch Queue和Dispatch Source

GCD 核心概念:任务 + 队列

区别并行队列自定义串行队列主队列
同步没有开启新线程,串行执行没有开启新线程,串行执行没有开启新线程,串行执行
异步开启新线程,并行执行开启新线程,串行执行没有开启新线程,串行执行

任务:需要执行的操作

创建的任务有 同步(sync)异步(async) 两种执行方式。

区别同步执行异步执行
是否等待任务执行完毕后再继续
开启新线程的能力不具备具备
dispatch_sync(dispatch_get_global_queue(0, 0), ^{
    NSLog(@"同步执行");
});
复制代码
dispatch_async(dispatch_get_global_queue(0, 0), ^{
    NSLog(@"异步执行");
});
复制代码

队列:存放任务的地方

队列也分为两种串行并行

区别串行并行
取任务的方式一次职能取出一个任务执行完毕后,才能执行下一个一次可以取出多个任务同时执行
开启新线程的能力只开启一个线程(或者不开启,在当前线程执行)可以开启多个线程,并同时执行

并发队列只有在异步函数下才有效。

系统Queue
Main Dispatch Queue(主队列 + 串行)
dispatch_get_main_queue()
复制代码
Global Dispatch Queue(全局队列 + 并行)
自定义Queue
//创建了一个并行队列
dispatch_queue_t queue = dispatch_queue_create("com.concurrent.queue", DISPATCH_QUEUE_CONCURRENT);
//创建了一个串行队列
dispatch_queue_t queue = dispatch_queue_create("com.serial.queue", DISPATCH_QUEUE_SERIAL);
复制代码

使用GCD的步骤就是创建任务,然后把任务添加到队列中,GCD会自动从队列中取出任务放到线程中去执行。

参考博客

iOS 多线程:『GCD』详尽总结

GCD入门(一): 基本概念和Dispatch Queue

Dispatch Source学习

iOS多线程——Dispatch Source

IOS并发编程指南:Dispatch Queue任务执行与Dispatch Source

iOS 并行编程:GCD Dispatch Sources

iOS Swift GCD 开发教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值