4个基本概念
同步
- 之前写程序的时候都是从上到下,从左到右,代码执行顺序
- 1个线程执行多个任务,也是依次执行,1个线程同一时间执行1个任务
异步
多个线程可以 "同时" 执行多个任务
进程
- 当前计算机中正在运行的程序
- 每个进程之间是独立的,每个进程均运行在其专用的且受保护的内存空间内
- 通过“活动监视器”可以查看Mac系统中所开启的进程
线程
- 一个进程包含一个或多个线程
- 线程是程序执行的基本单位,进程中所有的任务都在线程中运行
多线程
多线程的基本概念
- 一个进程中可以开启多个线程
- 多个线程是“同时”运行的
- 多线程可以提高程序的执行效率
执行原理
通过CPU的快速切换线程
特征总结
- (单核CPU)同一时间,cpu只能处理1个线程,只有1个线程在执行
- 通过CPU的快速切换
- 切换时间非常短,造成了“同时”执行的现象
- 开启非常多线程的时候,CPU切换线程消耗大量资源导致线程的执行效率降低
优缺点
优点
- 能适当的提程序的执行效率
- 能适当的提高资源的使用率
- 线程执行完所有任务后自动销毁
缺点
- 开启线程需要占用一定的内存空间(默认情况下,每一个线程都占512KB)
- 如果开启大量的线程,会占用大量的内存空间,降低程序的性能
- 线程越多,cpu在调用线程上的开销就越大
- 程序设计更加复杂,比如线程间的通信、多线程的数据共享
主线程
- 一个程序运行后,默认会开启1个线程,称为“主线程”或“UI线程”
- 主线程一般用来 刷新UI界面 ,处理UI事件(比如:点击、滚动、拖拽等事件)
主线程使用注意
- 别将耗时的操作放到主线程中
- 耗时操作会卡住主线程,严重影响UI的流畅度,给用户一种卡的坏体验
iOS中的四中多线程技术的区别
简介 | 语言 | 线程生命周期 | 使用频率 | |
---|---|---|---|---|
pthread | 跨平台POSIX,使用不便 | C | 手动 | 几乎不用 |
NSThread | 面向对象,直接操作线程对象 | OC | 手动 | 偶尔 |
GCD | 对多核性能优化,使用方便 | C | 自动 | 经常 |
NSOperation | 对GCD的封装,面向对象 | OC | 自动 | 经常 |