什么是多线程?
多线程是一个比较轻量级的方法来实现单个应用程序内多个代码执行路径。
在应用程序中存在多个线程提供了两个非常重要的潜在优势:
- 多个线程可以提高应用程序的感知响应。
- 多个线程可以提高应用程序在多核系统上的实时性能。
当然,多线程并不能解决所有程序性能问题,它带来的好处同时也伴随着潜在问题。当拥有多个可执行路径的时候,会给代码增加更多的复杂性。如果两个线程视图同时处理相同的数据结构,一个线程有可能会覆盖掉另外线程的改动导致破坏改数据结构。
线程术语
- 线程 用于指代独立执行的代码段。
- 进程(progress) 用于指代一个正在运行的可执行程序,他可以包含多个线程。
- 任务(tast) 用于指代抽象的概念,表示需要执行工作。
线程支持
以下几个部分描述了在iOS上面使用多线程的时候需要注意的关键技术:
- 线程包
Mach的实现没有提供多线程的基本特征,但是包括抢占式的执行模型和调度线程的能力。
在应用层上,其他平台一样所有现成的行为本质上是相同的。线程启动之后,线程就进入三个状态中的任何一个:运行(running)、就绪(ready)、阻塞(blocked)。如果一个线程当前没有运行,那么他不是处于阻塞,就是等待外部输入,或者已经准备就绪等待分配CPU。线程持续在这三个状态之间切换,直到它最终退出或者进入中断状态。 - Run Loops
一个run loop是用来在线程上管理事件异步到达的基础设施。一个run loop为线程监测一个或多个事件源。当时间到达的时候,系统唤醒线程并调度事件到run loop,然后分配给指定程序。若果没有时间出现和准备处理,run loop把线程置于休眠状态。
在创建线程的时候不一定要使用一个run loop,但是创建的话会给用户带来更好的体验。Run Loops可以使用最小的资源来创建长时间运行线程。
为了配置run loop,需要做的是启动线程,获取run loop的对象引用,设置你的事件处理程序,并且告诉run loop运行。