多线程
1 多线程原理
多线程的原理就是在 APP 运行中,多个线程之间的关联.现在
- 对于单核 CPU 来说,同一时间内,CPU 只能处理一个线程,
- 多线程同时执行的实质是, CPU 在多条线程之间快速的切换.
- 多核 CPU 来说,就是在同一时间内有多条线程可以同时执行
2 进程和线程
进程:(一个 APP 有一个进程)
1.1 进程是指在系统中正在运行的应用程序
1.2 每个进程之间的独立的,每个进程均运行在其专用的且受保护的内存空间内
1.3 通过 活动监视器 可以查看Mac 系统中所开启的进程
线程:
1.1 一个进程至少有一个线程组成
1.2 线程的进程的基本执行单元,一个进程是所有任务都在线程中执行
3 资源抢夺/死锁
多个线程同一时间内,共同访问一个资源.会造成资源的抢夺.线程之间(以 A 和 B 为例),A 等待 B 释放资源, B 等待 A 释放资源,相互之间等待会造成死锁.
4 NSThread,GCD&NSOperation
1)NSThread
优点:NSThread 比其他两个轻量级
缺点:需要自己管理线程的生命周期,线程同步。线程同步对数据的加锁会有一定的系统开销
2)Cocoa NSOperation
优点:不需要关心线程管理, 数据同步的事情,可以把精力放在自己需要执行的操作上。
Cocoa operation相关的类是NSOperation, NSOperationQueue.
NSOperation是个抽象类,使用它必须用它的子类,可以实现它或者使用它定义好的两个子类: NSInvocationOperation和NSBlockOperation.
创建NSOperation子类的对象,把对象添加到NSOperationQueue队列里执行。
3) GCD(全优点)
Grand Central dispatch(GCD)是Apple开发的一个多核编程的解决方案。在iOS4.0开始之后才能使用。GCD是一个替代NSThread, NSOperationQueue,NSInvocationOperation等技术的很高效强大的技术。
5 线程之间的通信
5.1 全局变量
进程中的线程间内存共享.(常用)
注:定义全局变量的时候,最好要用volatile修饰,以免被系统修饰.
5.2 Message消息机制
常用的Message通信的接口主要有两个:PostMessage和PostThreadMessage, PostMessage为线程向主窗口发送消息。而PostThreadMessage是任意两个线程之间的通信接口。