作者:Mitchell
一 进程:
- 指在系统中正在运行的一个应用程序
- 每个进程之间是相互独立的
二 线程:
- 1个进程要想执行任务,必须得有线程(每个进程至少要有1条线程)
- 1个进程的所有任务都再线程中执行
- 线程的内部是串行的
三 多线程:
-
什么是多线程
- 1个进程中可以开启多条线程,多条线程可以并行执行不同的任务。
- 多线程可以提高程序执行的效率
- cpu同时只能运行一条线程,只不过通过时间片轮转,也就是CPU快速在多个线程之间调度(切换),如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象。
多个线程的缺点:
-
多线程的优点:
- 能适当提高程序的执行效率
- 能适当提高资源利用率(CPU,内存利用率)
-
多线程的缺点
- 创建线程是有开销的,iOS下主要成本包括:内核数据结构(大约1KB)、栈空间(子线程512KB、主线程1MB,也可以使用
-setStacjSize:
设置,但是必须是4K的倍数,而且最小是16K),创建线程大约需要90毫秒的创建时间 - 如果开启大量的线程,会降低程序的性能
- CPU会在N多线程之间调度,CPU会累死,消耗大量的CPU资源
- 每条线程被调度执行的频次被降低(线程的执行效率下降)
- 创建线程是有开销的,iOS下主要成本包括:内核数据结构(大约1KB)、栈空间(子线程512KB、主线程1MB,也可以使用
四 主线程:
- 什么是主线程
- 一个 iOS 程序运行后,默认会开启1条线程,称为
“主线程”
或“UI线程”
- 一个 iOS 程序运行后,默认会开启1条线程,称为
- 主线程的主要作用
- 显示/刷新UI界面(如果在子线程中处理会有bug)
- 处理UI事件(点击、滚动、拖拽)
- 主线程的使用注意
- 不要将比较耗时的操作放到主线程中
-
如何获取主线程
[NSThread mainThread];(number = 1,name = main)
-
[NSThread currentThread];
``` (如果是在当前方法是被主线程执行的,那么拿到的就是主线程,否则是当前线程)
+ 如何判断当前是否是在主线程中执行的
- 判断当前是否在主线程中执行的
[NSThread isMainThread]
---