ios开发-多线程

来源:互联网 发布:算法设计 答案 编辑:程序博客网 时间:2024/06/12 01:47

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

多线程优势:

(1)充分发挥多核处理器优势,讲不通现成分配给不同的处理器,真正进入“并行运算”状态;

(2)将耗时的任务分配给其他线程执行,由主线程负责统一更新界面会使应用流畅,用户体验更好;

多线程弊端:

(1)新建线程会消耗内存空间和cpu时间,县城太多会降低系统运行性能;

多线程误区:

(1)多线程是为了并发执行多项任务,不会提高单个算法本身的效率;


进程是什么?

(1)正在进行中的程序被称为进程,负责程序运行的内存分配

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


线程是什么?

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

(2)一个进程中至少包括一条线程,即主线程

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


三种多线程

第一种是GCD

(1)基于C语言的底层API

(2)用block定义任务,使用起来非常灵活便捷

(3)提供了更多的控制能力以及操作队列中所不能使用的底层函数

基本思想:用操作(block)放在队列中去执行

(1)操作用block定义

(2)队列负责调度任务执行所在的线程,以及具体的执行时间

(3)队列特点先进先出(FIFO)的,新添加之队列的操作都会在队尾。

GCD的函数都是以dispatch开头的。

GCD有四种类别的队列:

(1)并行队列

特点:没有队形,执行顺序不能控制

应用场景:并大执行任务,没有先后顺序

缺点:(1)不能控制执行顺序;(2)不能控制线程数量;创建n个线程

并行队列的同步任务,穿插运行,不需要创建线程

(2)串行队列

特点:依次执行

串行队列的同步任务,会在主线程上运行

异步任务,会并发执行,但是在串行队列中,任然会一次顺序执行

(3)全局队列

特点:与并行队列的区别是,不需要创建,执行效果相同。全局队列没有名称,调试时无法确认准确队形

(4)主线程队列

特点:(1)保证在主线程上执行;(2)异步任务,主线程上运行,会保持队列;(3)同步任务,阻塞(因为要等主线程被杀掉,但是一般主线程是不会被杀掉的)


线程的回收:

线程的回收室友队列负责的


下面是不同队列中嵌套dispatch_sync(同步任务)的结果:

(1)全局队列,都在主线程上执行,不会死锁

(2)并行队列,都在主线程上执行,不会死锁

(3)串行队列,会死锁,但是会执行同步操作之前的代码

(4)主线程队列。直接死锁


第二种是NSOperation,NSOperationQueue

(1)NSOperationQueue(操作队列)由GCD提供的队列模型是一套oc的API

(2)GCD提供更底层的控制,NSOperationQueue则是在GCD之上实现了一些方便的功能,更安全

(3)分成良种不同类型的队列:主队列和自定义队列

1.主队列运行在主线程上

2.自定义队列在后台执行

3.队列处理的任务是NSOperation的子类:(1)NSInvocationOperation;(2)NSBlockOperation。

(4)setMaxConcurrentOperationCount:

设置同事并发的线程数量,能够有效降低CPU和内存的开销(GCD不容易实现)


第三种是NSThread




0 0
原创粉丝点击