进程和线程
什么是进程
- 进程指系统中正在运行的应用程序
- 每个进程之间是相互独立的,每个进程均运行在其专用且受保护的内存空间
比如同时打开QQ、网易云音乐、Xcode,系统就会分别启动3个线程
什么是线程
- 1个进程想要执行任务,就必须得有线程(每个进程至少要有1条线程)
- 线程是进程的基本执行单元,一个进程的所有任务都在线程中执行
比如QQ聊天、网易云音乐播放音乐、迅雷下载电影,都需要在线程中执行
线程的串行
- 1个线程中任务的执行是串行的
- 在一个线程中执行多个任务,那么只能按顺序一个个执行
- 同一时间内1个线程只能执行一个任务
多线程
什么是多线程
- 1个进程中可以开启多条线程,每条线程可以同时(并行)执行不同的任务
- 进程 -> 车间 线程 ->车间工人
- 多线程可以适当提高程序执行效率
比如开启多条线程同时执行不同任务
多线程原理
- 同一时间,CPU只能处理1条线程,只有1条线程在执行任务
- 多线程并发执行,其实是CPU快速在多条线程之间调度(切换)
- 如果CPU调度的时间足够快,就造成了多线程并发执行的假象
如果线程非常多,会发生什么情况?
- CPU在N多线程之间调度,CPU会累死,消耗大量的CPU资源
- 每条线程被调度的频率降低(线程执行效率降低)
多线程优点
- 适当提高程序执行效率
- 适当提高资源利用率 (CPU、内存利用率)
多线程缺点
- 开启线程需要一定的内存空间(默认情况下,主线程占用1M,子线程512kb),如果过开启大量线程,会占用大量的内存空间,降低程序性能
- 线程越多,CPU调度线程上开销越大
- 程序设计更复杂,比如线程之间通信,多线程数据共享
多线程在iOS开发中应用
- 主线程:一个iOS程序运行后,会默认开启一条线程,称为主线程或者UI线程
- 主线程主要作用:显示刷新界面、处理UI事件(点击、滚动、拖拽事件)
使用主线程需要注意:不要将耗时的操作放在主线程,耗时操作会卡住主线程,严重影响UI的流畅度,给用户卡的体验