这是我参与「第四届青训营 」笔记创作活动的第10天
本篇文章将记录Objective-C 多线程编程与 GCD课程中的重点笔记
多线程基础
进程与线程
进程: 指在系统中正在运行的一个应用程序
线程: 系统分配处理器时间资源的基本大院, 或者是进程内独立执行的单元
进程与线程的关系: 一个进程可以有很多线程,每条线程并行执行不同的任务. 同一进程中的多条线程将共享该进程中的全部系统资源
串行、并行、并发
串行: 任务有序地一个一个地执行,前一个任务执行完之后才能执行下一个任务
并行: 多个任务在同一时刻被执行
并发: 多个任务在同一时间段内需要被执行
GCD Grand Central Dispatch
由Apple提供的一部执行任务接口, 能够让程序执行异步任务, 并且也为开发者简化了开发任务, 更加注重任务内容的编写, 而不用关注系统中线程的实现
GCD接口
任务与队列
任务: 将所需要执行的异步任务以block的形式提交至GCD接口中
队列: 不同的队列表示不同的执行线程, 执行GCD中所提交的任务
串行与并发队列
Main Dispatch Queue: 主队列(主线程执行任务) 串行
获取方式: dispatch_queue_t mainQueue = dispatch_get_main_queue();
Global Dispatch Queue: 四种不同优先级的并发队列;
获取方式: dispatch_queue_t queue1 = dispatch_get_global_queue(优先级, 0);
优先级 (优先级由高到低):
- DISPATCH_QUEUE_PRIORITY_HIGH
- DISPATCH_QUEUE_PRIORITY_DEFAULT
- DISPATCH_QUEUE_PRIORITY_LOW
- DISPATCH_QUEUE_PRIORITY_BACKGROUND
创建自定义队列
串行队列:
dispatch_queue_t queue1 = dispatch_queue_create("serialQueue", DISPATCH_QUEUE_SERIAL);
并发队列:
dispatch_queue_t queue1 = dispatch_queue_create("serialQueue", DISPATCH_QUEUE_CONCURRENT);
任务追加至队列(同步/异步)
追加方式:
dispatch_sync/async(queue, block)
注意: 要区分两种不同的任务追加方式, 并且追截到三种队列(并发、串行、主队列)中相对应的结果