一、进程
进程可以理解为一个应用程序;比如说打开 QQ,那么在内存中就会为 QQ 分配一块进程;打开微信,那么在内存中就会为 微信 分配一块进程;并且进程之间是相互独立的
二、线程
1. 基本概念
线程是进程的基本单元(可以理解为一个进程中的各个操作);比如说 QQ,其中的很多操作,比如说发送文件,下载图片等,这些都是子线程
例如 xcode 进程中的线程:::
一个进程最少有一个线程,称为主线程
进程的各个操作都是在主线程或子线程中完成的
2. 串行、并行
串行和并行都是针对线程而言的
串行 :::
串行是指一个线程中的任务一个一个执行,即上一个任务执行完,下一个任务才能继续;即在同一时间内,只能执行一个任务
如图 :::
可以看出,串行的耗时是所有任务的总和
并行
并行是指一个线程中的任务可以同时进行;即在同一时间内可以进行多个任务
如图:::
3. 多线程
1) 概念
因为每个进程最少都一个线程(主线程),在主线程中还可以创建多个子线程,并且主线程和子线程中的任务是互不干涉的;
也就是说,在同一时间内,可以同时进行主线程和子线程中的任务
如图:::
2) 原理
a. 单核操作系统
在单核操作系统上,因为在同一时间内只能运行一个任务,那如何实现多线程呢??
系统会为每一个线程指定一个确定的执行时间,当然这个时间很短,然后在各个线程之间做切换(调度),以此来达到多线程
如图:::
可以看出,单核操作系统的多线程实际上还是串行的,只不过在时间很短的情况下进行线程之间的切换,所以看起来就好像是多线程了
b. 多核操作系统
在多核操作系统上,在同一时间内可以运行多个任务,所以很容易实现多线程,并且是真正的多线程
如图
3)优缺点
a. 优点
能提高 CPU 的利用率和执行效率
b. 缺点
消耗内存(创建一个新的线程会消耗一定的内存)
如果开启的线程过多,那么 CPU 的开销就越大
4)iOS 的多线程
iOS 应用在启动后,只会开启一条线程(主线程,也称 UI 线程)
通常,在 主线程 中做一些不耗时的工作;例如 刷新 UI 界面、监控事件等