一. 进程和线程
- 进程
- 系统中正在运行的程序, 称之为一个进程
- 每个进程, 都在自己独立的内存空间运行, 并且进程之间互不影响
- 线程
- 进程的所有任务, 都是在线程执行的, 可以说他是进程的基本执行单元
- 进程的串行
- 单个进程中任务的执行, 是串行执行的, 每个任务按顺序执行
- 单个线程, 同一时间内, 只能执行一个任务
- 进程和线程的比较
- 进程
- 进程是CPU分配资源和调度的单位
- 同一个进程中的线程, 共享进程的资源
- 线程
- 线程是CPU调用(执行任务)的最小单位
- 一个程序可以对应多个进程, 一个进程中可以有多个咸亨
- 进程
二. 多线程
-
概念与原理
- 一个进程可以有多个线程, 每个线程可以并行(同时)执行不同的任务(如一个下载软件, 可以使用三个线程, 同时下载不同的文件)
- 原理
- 统一时间, CPU只能调用一条线程, 也就是说同一时间只有一条线程能在工作
- 并行, 其实就是CPU在以极快的速度, 在不同的线程之间调度执行, 造成了并行的假象(特指单核CPU)
- 而如今的多核CPU, 每个核心可以同时处理不同的任务, 从而真正达到了多线程并发执行任务
-
多线程的优缺点
- 优点:
- 提高了程序运行的效率
- 提高了资源利用率, 充分的使用了空闲的内存和CPU资源
- 缺点
- 每创建一条线程, 都会开辟内存空间, 并且消耗90毫秒的时间
- 如果开启过多的线程, 势必会拖慢CPU的运行速度, 降低程序的性能, 让CPU开销过大
- 多线程的程序, 往往设计上会较为复杂, 线程间的切换/主线程和子线程的协调, 都是开发中较难解决的问题
- 优点:
三. 多线程在iOS开发中的应用
-
主线程
- 应用程序运行之后, 在UIApplication回自动开启一条主线程(UI线程)
- 主线程的作用, 主要是用来显示/刷新UI界面, 处理UI事件
-
使用时的注意事项
- 耗时操作(如加载时间过长的操作), 不要放在主线程挡住, 否则会影响主线程处理UI事件, 导致运行界面拖慢, 降低用户体验
- 当耗时操作还没有结束的时候, UI界面无法响应用户的交互, 直至耗时操作结束后, 主线程才能继续处理UI事件
- 因此: 耗时操作, 应该放在子线程中去执行(如后台线程, 非主线程)
-
判断当前线程是否为主线程
- 使用
[NSThread currentThread]
来获取当前的线程, 如果打印的结果为number = 1, name = main
, 则该线程就是主线程 - 使用
[NSThread isMainThread]
该方法会返回一个BOOL值, 如果当前线程是主线程的话, 就会返回1, 否则返回0 - 使用NSTherad创建的线程对象"thread", 调用
[thread isMainThread]
, 就会判断当前的线程对象是否为主线程
- 使用
-
多线程的实现方案
4B1838CF-D9A2-44EC-9FE1-E11B2D9E7323.png