这是我参与「第四届青训营 」笔记创作活动的的第8天
Objective-C 多线程编程与 GCD(上)| 青训营笔记
进程与线程
- 进程(Process):资源分配最小单位
- 线程(Thread):调度执行最小单位
- 进程与线程
- 同一进程下的线程共享进程的内存空间
- 代码段
- 数据段
- 堆
- 进程级资源(打开文件)
- 一个进程可以包含多个线程
- 每个app一个进程,多个线程,一个进程崩溃不会影响其他进程,一个线程崩溃会影响同一个进程下的其他线程
- 同一进程下的线程共享进程的内存空间
多线程基本概念
串行、并行、并发
- 串行:多个任务依次执行,先进先出
- 核酸检测:一个队伍一个窗口
- 并行:多个任务同时执行
- 核酸检测:多个队伍多个窗口
- 并发:多个任务在一段时间内需要被执行
- 核算检测:很多人在上午要做完核算
线程生命周期
五个状态:出生、就绪、运行、阻塞、死亡
Runloop事件循环:让线程在适当的时间处理任务不会退出
- iOS App中,主线程(main函数)Runloop在程序运行时就会启动,其他线程Runloop需要手动开启
- 主线程
- 用于绘制UI和处理UI交互事件,又称为UI线程
- 耗时操作方案主线程的主循环执行,引起app卡顿
- 将耗时操作放到子线程
- 多线程优劣
- 优点
- 提高程序执行效率
- 提高资源利用率
- 缺点
- 创建线程、线程调度有成本,大量线程降低程序性能
- 会出现线程安全问题,增加了程序设计的复杂度
- 优点
IOS多线程实现方案
- POSIX Thread可移植
- 类UNIX系统通用多线程API:pthread命令
- C接口、跨平台、可移植
- 工程上使用少:需要手动管理线程生命周期
- NSThread:Pthread面向对象封装
- OC接口,可以通过KVO监听部分属性(是否执行中、结束、取消)
- 工程上使用少:需要手动管理线程生命周期
- 一般用于调试
- GCD:Grand Central Dispatch异步执行任务的技术
- 已经抽象了任务和队列的概念:定义想执行的任务,并追加到适当的派发队列
- 好处:
- 自动使用更多CPU内核
- 自动管理线程的生命周期
- NSOperation/NSOperatonQueue:基于GCD的多线程编程接口
- OC接口
- 可指定任务依赖关系,控制执行顺序
- 支持设定任务并发数
- 支持取消任务,可用KVO监听任务状态
未完待续