• 多任务系统调度

     每个应用程序由操作系统分配的短暂的时间片(Timeslice)轮流使用CPU,由于CPU对每个时间片的处理速度非常快,用户会感觉这些任务好像是同时执行

     并发:多个任务在同一段时间内同时执行,但在一个时间点,一个CPU只能执行一个任务。


  • 进程与线程

进程

     正在运行的程序,负责程序的内存分配

     每一个进程都有自己独立的虚拟内存空间

线程

     线程是进程中一个独立执行路径(控制单元)

     一个进程中至少包含一条线程,即主线程

     可以将耗时的执行路径(如:网路请求)放在其他线程中执行


进程与线程的区别:

     进程是分配资源的最小单位,线程是处理器调度的最小单位


创建线程的目的:

     为了开启一条新的执行路径,运行指定的代码,与主线程中的代码实现同时执行。

在iOS应用中,主线程的栈区控件为1M,子线程的栈区为512K



  • 多线程开发简介

优势

1)充分发挥多核处理器的优势,将不同线程任务分配给不同的处理器,真正进入“并行计算”状态。

2)将耗时的任务分配到其他线程,由主线程负责更新界面,使应用程序运行更加流畅,用户体验更好。

3)当硬件处理器的数量增加时,程序运行更快,代码无需调整


弊端 :新建线程会消耗内存空间和CPU时间,线程太多会降低系统运行性能。


误区 :

1)多线程技术是为了并发执行多项任务,不会应用程序的执行效率。

2)算法的设计、优化,是提高程序执行效率的方案。


  • iOS开发中用到的线程技术

iOS本质上是Unix系统,可以支持pthread线程库,但并不推荐

iOS中进行多线程的操作,管理方式是“线程池”

     线程池中的关键元素:线程调度中心、任务队列。

     线程调度中心:负责创建线程、从任务队列取出并分配任务的执行。

     任务队列:存储需要多线程执行的任务。

     对于开发人员,想要实现多线程的任务,只需要向指定的任务队列放入任务即可,线程调度中心会分配并自动去执行这些任务。


    iOS多线程开发简介_iOS


iOS开发中常用的线程技术包括:

1)NSObject提供了的多线程方法

     建立线程非常方便,但对线程管理很难实现,不推荐

2)GCD —— Grand Central Dispatch  大中心调度

     基于C语言的API,相对底层。使用BLOCK定义任务行为,使用起来简单灵活

3)NSOperation

     基于GCD实现的一套Objective-C的面向对象接口,且提供了一些GCD不容易实现的特性


  • NSThread

描述了一个线程对象,线程对象不需要我们去创建,而是由任务队列负责创建及管理

     通过线程对象,可以获得线程的状态信息

获得当前的线程对象:

+ (NSThread *)currentThread

     使用%@打印线程对象,能够查看到线程的一些信息

线程睡眠方法:

+ (void)sleepForTimeInterval:(NSTimeInterval)ti

当前线程终止方法:

 + (void)exit