Objective-C 多线程编程与 GCD| 青训营笔记

112 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第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);

优先级 (优先级由高到低):

  1. DISPATCH_QUEUE_PRIORITY_HIGH
  2. DISPATCH_QUEUE_PRIORITY_DEFAULT
  3. DISPATCH_QUEUE_PRIORITY_LOW
  4. 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)

注意: 要区分两种不同的任务追加方式, 并且追截到三种队列(并发、串行、主队列)中相对应的结果