线程进程的管理
线程与进程的关系
- 1、线程是CPU执行任务的基本单位,一个进程可以有多个线程,但同时只能执行一个任务。
- 2、进程就是运行中的软件,是动态的。
- 3、一个操作系统可以对应多个进程,一个进程可以有多条线程,但至少有一个线程,同一个进程内的线程共享进程里的资源
主线程的作用
进程一启动就自动创建,
用于显示和刷新UI,同时处理UI事件
子线程的作用
- 1、处理耗时的操作
- 2、不能刷新UI
管理线程的方法
-
NSThread:
- NSThread是轻量级的多线程开发,使用并不复杂,但使用NSThread需要自己管理线程的声明周期。
-
NSOperation:
1、使用NSOperation和NSOperationQueue进行多线程开发类似于线程池,只要将一个NSOperation(实际开发中需要使用其子类NSInvocationOperation、NSBlockOperation)放到NSOperationQueue这个队列中线程就会依次启动。NSOperationQueue负责管理、执行所有的NSOperation,在这个过程中可以更加容易管理线程总数和控制线程之间的依赖关系。
2、NSOperation有两常用子类用于创建线程操作:NSInvocationOperation和NSBlockOperation,两种方式本质没有区别,但后者使用block形式进行代码组织,使用相对方便
-
GCD(Grand Center Dispatch)
1、GCD是基于C语言开发的一套多线程开发机制,也是目前苹果官网推荐的多线程开发方法。
2、GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程),程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码
3、GCD是这三种多线程开发方式中抽象层次最高的,使用起来也是最为方便的,只是基于C语言开发,并不像前两种是面向对象开发,而是完全面向过程的。这种机制相比较于前面两种多线程开发方式最显著的优点就是它对于多核运算更加有效,会自动利用更多的CPU内核(比如双核、四核)。
-
4、GCD中也有一个类似于NSOperationQueue的队列,GCD统一管理整个队列中的任务。但是GCD中的队列分为并行队列和串行队列两类:
1、串行队列:只有一个线程,加入到队列中的操作按添加顺序依次执行。 2、并发队列:有多个线程,操作进来以后他会将这些线程安排在可用的处理器上,同时保证先进来的任务优先处理。 其实在GCD中还有一个特殊队列就是主队列,用来执行主线程上的操作任务。