在看多线程之前看一些基本概念
一:
线程:线程是CPU调度(执行任务)的最小单位;其实质就是一段代码(一个任务)
进程:系统中正在运行的一个应用程序;进程是CPU分配资源和调度的单位
两者的联系与区别:
1)线程是进程的组成部分,一个进程可以开启多个子线程,但是每1个进程至少要有1个线程
2)1个进程的所有任务都是在线程中执行的
3)同1个进程内的线程共享进程的资源
同步: 只能在当前线程按先后顺序依次执行,不开启新线程。
异步: 可以在当前线程开启多个新线程执行,可不按顺序执行。
队列: 装载线程任务的队形结构。
并发: 线程执行可以同时一起进行执行。
串行: 线程执行只能依次逐一先后有序的执行。
二:
多线程:一个程序开启多条线程,每条线程可以并行(同时)执行不同的任务
原理:
1)多个线程并发执行,其实质是CPU快速地在多条线程之间调度(切换)
2)当CPU调度线程的时间足够快,就会造成多线程并发执行的假象
优点:
1)能适当地提高程序的执行效率
2)能适当提高资源利用率(CPU和内存利用率)
缺点:
1)创建多线程是有开销的,包括内存空间和创建时间上的开销
2)如果开启大量线程,会降低程序的性能
3)线程越多,CPU在调度线程上的开销就越大
什么是主线程?主线程的作用和使用注意有哪些?
- 定义
- iOS程序运行后,默认开启1条线程,称为“主线程”
- 作用
- 显示/刷新UI界面
- 处理UI事件(点击、滚动、拖拽事件等)
- 注意
- 别将耗时操作放在主线程,耗时操作会卡住主线程,影响UI的流畅度
实现多线程的方法一共有哪些?
NSThread / GCD / NSOPeration
项目中一般在哪用到多线程?
多线程一般用于耗时操作,如:
- 网络请求
- 上传,下载文件
- 读取数据库
- 文件操作
- 大循环