你的位置:首页 > 操作系统

[操作系统]多线程简单总结

多线程

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是任意两个线程之间的通信接口。