iOS面试资料搜集iOS 开发每天分享优质文章iOS开发

iOS多线程基础概念和简单使用

2017-10-23  本文已影响100人  朝雨晚风

(一)、线程和进程的概念

进程和线程实际都是一个时间段的描述,是CPU工作时段的描述。
进程时间段 = CPU加载程序上下文的时间 + CPU执行时间 + CPU保存程序上下文的时间
(可以简单理解为进程为一个应用程序,但一个应用程序可能创建多个进程,这时候一个进程的结束不代表应用程序运行结束)

线程时间段 = CPU加载线程上下文的时间 + CPU执行时间 + CPU保存线程上下文的时间
(是CPU调度和分派的基本单位,是更为细小的时间段,远小于进程时间段)

(二)、线程的状态与生命周期

下图是线程状态示意图,从图中可以看出线程的生命周期是:新建 - 就绪 - 运行 - 阻塞 - 死亡


线程的状态与生命周期.png

(三)、多线程的四种解决方案

多线程的四种解决方案分别是:pthread,NSThread,GCD, NSOperation。
下图是对这四种方案进行了解读和对比。


多线程的四种解决方案.png

(四)、GCD和NSOperation的理解与使用

术语解释.png

(1)、GCD的特点

GCD以block为基本单位,一个block中的代码可以为一个任务。GCD以block为基本单位,一个block中的代码可以为一个任务。下文中提到任务,可以理解为执行某个block
同时,GCD中有两大最重要的概念,分别是“队列”和“执行方式”。
使用block的过程,概括来说就是把block放进合适的队列,并选择合适的执行方式去执行block的过程。

2050812-4331a4ac4cebd9d8.png

(2)、NSOperation简介

NSOperation 和GCD 到底选哪一个?

  1. 从性能上来说:
    GCD是底层的C语言构成的API,更接近底层,而NSOperationQueue基于GCD,使用Objective-C实现的面向对象的线程管理,比GCD更高级抽象。所以GCD在追求性能的底层操作来说,是速度最快的。(单纯从性能速度来说,只有Instruments显示有真正的性能提升时才有必要用低级的GCD。)
  2. 对同一个并行队列中的任务操作来说:
    在NSOperationQueue中,可以随时取消已经设定要准备执行的任务,能够方便地设置依赖关系,能够设置NSOperation的priority优先级,而GCD需要自己写更多的代码来实现。
  3. 从复用度来说:
    能够对NSOperation进行继承,在这之上添加成员变量与成员方法,提高整个代码的复用度,这比简单地将block任务排入执行队列更有自由度,能够在其之上添加更多自定制的功能。

上一篇 下一篇

猜你喜欢

热点阅读