iOS面试-进程、线程、多进程、多线程、任务

进程

  1. 进程是具有一个独立功能的程序关于某次数据集合的一次云层活动,是操作系统分配资源的基本单元
  2. 进程是指正在独立运行的一个应用程序,就是一段程序的执行过程,可以理解为手机上的一个打开的app
  3. 进程之间是相互独立的,进程运行在专用并且受保护的内存空间中,拥有独立运行所需要的全部资源

线程

  1. 程序执行流的最小单元,线程是进程中的一个实体
  2. 一个进程想要执行任务,必须至少有一条线程,引用程序启动时候,系统会默认开启一条线程,也就是主线程

进程和线程关系

  1. 线程是进程的执行单元,进程的所有任务都在线程中执行
  2. 线程是CPU分配资源和调度的最小单位
  3. 一个程序可以对应多个进程,一个进程中可以有多个线程,但是至少要有一条线程
  4. 同一个进程内的线程共享进程资源

多进程

  • 进程是程序在计算机上的一次活动。当运行一个程序时,就启动了一个进程。
  • 进程分为系统进程和用户进程。用于完成操作系统各种功能的进程就是系统进程,是处于运行状态下的操作系统本身;由用户启动的进程是用户进程,进程是操作系统进行资源分配的单位
  • 进程可以被细化为线程,就是进程能有多个独立运行的更小单位。在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态,这便是多进程

多线程

  1. 同一时间,一个CPU上只能处理1条线程。而多线程并发执行,其实是CPU快速的在多条线程之间切换
  2. 如果线程非常多的话,CPU在多个线程中切换,就会消耗很多的CPU资源,线程被执行的频次会降低

  3. 多线程优点:

    • 能适当提高程序执行效率
    • 能适当提高资源利用率
  4. 多线程缺点:
    开启线程是需要占用一定的资源空间的,但是如果开启大量线程,就会占用一定资源空间,降低程序性能

任务

GCD和NSOperation

GCD是面向底层的C语言的API,NSOperationQueue是用GCD进行封装构建的,是GCD的高级抽象

  1. GCD执行效率高,而且由于队列中执行的时block构成的任务,因此是一个轻量级的数据结构,写起来其也方便
  2. GCD只支持FIFO队列,而NSOperationQueue可以通过设置最大并发数,设置优先级,添加依赖关系等调整执行顺序
  3. NSOperationQueue设置可以跨队列设置依赖任务,但是GCD只能通过设置串行队列,或者添加barrier任务,才能控制执行顺序
  4. NSOperationQueue因为面向对象,所以可以支持KVO,可以监测operation的执行状态

当只是简单用到异步操作,没有特别复杂的线程关系管理,推荐使用GCD
当考虑到异步操作之间的事务性、顺序性、依赖关系,此时GCD需要自己写更多代码实现,而NSOperationQueue已经内建了这些支持