1、进程
概念
在系统中正在运行的程序
特点
进程之间相互独立,每个进程运行在自己的内存空间内
实例
同时打开QQ、迅雷,系统会启动两个不同的进程
2、线程
概念
线城是进程的基本执行单元,即进程想要执行任务,必须得有线程
特点
1.一个进程至少有一条线程
2.多条线程可以同时执行
3.多个线程之间共享进程的资源
4.线程之间可以相互通信,即从一条执行的线程切换到另一条线程
实例
1.迅雷打开时,就开启了一条线程
2.迅雷同时下载多部电影
3.迅雷所有的下载任务都共享迅雷的资源
4.迅雷下载一部电影较慢时,可以自动暂停,并开启另一个下载任务
3、串行、并行(并发)
概念
串行:一条线程中的任务一个一个的按照顺序执行
并行:多条线程同时执行
特点
1.一条线程可以存放多个任务,但在同一时间内只能执行一个任务
2.多条线程可以同时执行
实例
1.同一列火车进站,只能按照车头车厢的顺序一个接一个的进站
2.多列火车可以同时进站,但是每一列火车的车头车厢只能按序进站
4、主线程(UI线程)
概念
iOS程序运行后,默认开启的线程,即主线程(UI线程)
作用
显示或刷新UI界面
注意
1.耗时操作不能放在主线程,如下载较大的文件如果放在主线程会严重影响流畅度
2.显示或刷新UI界面只能放在主线程
5、多线程
概念
同一个进程中同时开启多个线程,每条线程执行不同的任务
本质:速度快
1.同一时间,CPU只能处理一条线程,意味着只有一条线程在执行
2.CPU以人类难以察觉的速度在不同的线程之间切换,造成多条线程并发执行的假象
3.如果线程非常非常多,CPU切换频繁,消耗大量资源,线程执行效率降低
特点
优点
1.多条线程同时(并发)执行,提高程序的执行效率
2.提高资源利用率,包括CPU、内存等
缺点
1.开启新线程会占用一定内存,线程过多会降低性能
2.程序设计更加复杂,比如线程之间的通信、多条线程的数据共享
实例
迅雷可以同时下载多个不同的文件,但是如果同时下载的文件非常多,明显感觉卡
6、线程通信
概念
在一个进程中,通常有多个线程,线程不是孤立存在的,线程之前需要"沟通交流"
体现
1条线程传递数据给另一条线程
在一条线程中执行完成特定的任务后,转到另一条线程继续执行任务
常用方法
- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullableid)arg waitUntilDone:(BOOL)wait;
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullableid)arg waitUntilDone:(BOOL)wait;
7、iOS多线程技术