前言
线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。
本文重点
- NSThread
- 多线程基础、pthread、开启线程的3种方式
- 线程的状态、线程安全问题、线程间的通信
- GCD
- 同步方法和异步方法、队列的使用、线程间的通信
- 延迟执行、一次性代码、队列组、单例模式-ARC、单例模式-MRC、用宏抽取单例模式
- NSOperation
- NSOperation和NSOperationQueue的概念理解、NSInvocationOperation、NSBlockOperation
- NSOperationQueue的常见方法、最大并发数、操作依赖、队列的取消\暂停\恢复
一、概念
1、进程:系统中正在运行的一个应用程序 2、线程:1个进程想要执行任务,必须得有线程。即线程是进程的基本执行单元
1)线程的串行:一个线程中任务的执行是串行的
2)多线程的原理:同一时间,CPU只能处理一条线程。多线程并发执行,其实就是CPU快速地在多条线程之间调度(如果CPU调度的时间足够快,就造成了多线程并发执行的假象)
二、多线程在iOS开发中的应用
1、什么是主线程:一个iOS程序运行之后,默认会开启一条线程,称为“主线程”,或者“UI线程” 2、主线程的主要作用:
显示、刷新UI界面 处理UI事件(点击、滚动、拖拽)
2.1 主线程的使用注意事项:
别将比较耗时的操作放到主线程中
一般的解决方案就是将那些耗时的操作放到另外一个线程中去执行,多线程编程是防止主线程堵塞,增加运行效率的最佳方法。
2.2 iOS中多线程的实现方案
iOS支持多个层次的多线程编程,层次越高的抽象程度越高,使用也越方便,也是苹果最推荐使用的方法。
根据抽象层次从低到高依次列出iOS所支持的多线程编程方法:
- Thread :是三种方法里面相对轻量级的,但需要管理线程的生命周期、同步、加锁问题,这会导致一定的性能开销
- Cocoa Operations:是基于OC实现的,NSOperation以面向对象的方式封装了需要执行的操作,不必关心线程管理、同步等问题。NSOperation是一个抽象基类,iOS提供了两种默认实现:NSInvocationOperation和NSBlockOperation,当然也可以自定义NSOperation.
- Grand Central Dispatch(简称GCD,iOS4开始支持):提供了一些新特性、运行库来支持多核并行编程,它的关注点更高:如何在多个cpu上提升效率
2.4 线程状态