本文主要介绍和多线程相关的知识。首先了解以下概念
1、 进程:
(1) 进程是指在系统中正在运行的一个应用程序
(2) 每个进程之间是独立的(每个应用之间是独立的),每个进程均在其专用且受保护的内存空间内(可理解为沙盒)。比如手机内存同时运行QQ进程,音乐进程。(一边听歌一边聊QQ,互不干扰)
2、 线程:
(1) 一个进程要想执行任务,必须得有线程(每个进程至少要有一个线程)
(2) 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行。
如下图,使用酷狗播放音乐、使用迅雷下载电影

3、 任务:
(1) 一个线程中任务的执行是串行的
(2) 如果一个线程中执行多个任务,那么只能一个一个地按顺序执行这些任务
(3) 即同一时间内,一个线程只能执行一个任务
因此,也可以认为线程是进程中执行任务的一条路径。
了解了以上概念,下面就认识跟多线程相关的概念。
1、 多线程:
(1) 一个进程中可以开启多条线程,每条线程可以并发(同时)执行不同的任务
比如,酷狗音乐一边听歌一边下载别的歌曲(一个酷狗进程开启了两条线程,一个听歌,一个下载歌曲)
2、 多线程原理:
(1) 同一时间,CPU只能处理一条线程,只有一条线程在工作(在执行任务)
(2) 多线程冰法(同时)执行,其实是CPU快速地在多条线程之间调度(切换)
(3) 如果CPU调度线程的速度足够快,就造成了多线程冰法执行的假象
那么如果线程非常非常多,会发生什么情况呢?
(1) CPU在多条线程之间调度虽然很快,但线程非常多的时候CPU的调度效率会下降,且CPU会消耗大量的资源
(2) 每条线程被调度执行的频次会降低(线程的执行效率降低)
3、 多线程的优点:
(1) 能适当提高程序的执行效率
(2) 能适当提高资源利用率(CPU、内存利用率)
4、 多线程的缺点:
(1) 开启线程需要占用一定的内存空间(默认情况下,主线程电泳1M,子线程占用512K),如果开启大量的线程,会占用内存空间,降低程序性能
(2) 线程越多,CPU在调度线程上的开销就越大
(3) 长须设计更加复杂:比如线程之间的通信、多线程的数据共享
5、 主线程:
(1) 一个iOS程序运行后,默认会开启一条线程,称之为“主线程”或“UI线程”
(2) 主线程的作用:a.显示\刷新UI界面;b.处理UI事件(如点击、拖拽等)
(3) 主线程使用注意点:不要将比较耗时的任务放到主线程中
6、 iOS中多线程的实现方案
技术 | 简介 | 语言 | 线程生命周期 | 使用频率 |
pthread | 1. 一套通用多线程API 2. 适用于Unix\Linux\Windows等系统 3. 跨平台\可移植 4. 使用难度大(底层) | C | 程序员管理 | 几乎不用 |
NSThread | 1. 使用更加面向对象 2. 简单易用,可直接操作线程对象 | OC | 程序员管理 | 偶尔使用 |
GCD | 1. 旨在代替NSThread等线程技术 2. 充分利用设备的多核 | C | 自动管理 | 经常使用 |
NSOperation | 1. 基于GCD(底层是GCD) 2. 比GCD多了一些更简单实用的功能 3. 使用更加面向对象 | OC | 自动管理 | 经常使用 |
本文就介绍到这里,关于多线程的更多内容将在下面的文章介绍。