iOS面试-进程、线程、多进程、多线程、任务
进程
- 进程是具有一个独立功能的程序关于某次数据集合的一次云层活动,是操作系统分配资源的基本单元
- 进程是指正在独立运行的一个应用程序,就是一段程序的执行过程,可以理解为手机上的一个打开的app
- 进程之间是相互独立的,进程运行在专用并且受保护的内存空间中,拥有独立运行所需要的全部资源
线程
- 程序执行流的最小单元,线程是进程中的一个实体
- 一个进程想要执行任务,必须至少有一条线程,引用程序启动时候,系统会默认开启一条线程,也就是主线程
进程和线程关系
- 线程是进程的执行单元,进程的所有任务都在线程中执行
- 线程是CPU分配资源和调度的最小单位
- 一个程序可以对应多个进程,一个进程中可以有多个线程,但是至少要有一条线程
- 同一个进程内的线程共享进程资源
多进程
- 进程是程序在计算机上的一次活动。当运行一个程序时,就启动了一个进程。
- 进程分为系统进程和用户进程。用于完成操作系统各种功能的进程就是系统进程,是处于运行状态下的操作系统本身;由用户启动的进程是用户进程,进程是操作系统进行资源分配的单位
- 进程可以被细化为线程,就是进程能有多个独立运行的更小单位。在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态,这便是多进程
多线程
- 同一时间,一个CPU上只能处理1条线程。而多线程并发执行,其实是CPU快速的在多条线程之间切换
如果线程非常多的话,CPU在多个线程中切换,就会消耗很多的CPU资源,线程被执行的频次会降低
多线程优点:
- 能适当提高程序执行效率
- 能适当提高资源利用率
多线程缺点:
开启线程是需要占用一定的资源空间的,但是如果开启大量线程,就会占用一定资源空间,降低程序性能
任务
GCD和NSOperation
GCD是面向底层的C语言的API,NSOperationQueue
是用GCD进行封装构建的,是GCD的高级抽象
- GCD执行效率高,而且由于队列中执行的时block构成的任务,因此是一个轻量级的数据结构,写起来其也方便
- GCD只支持FIFO队列,而
NSOperationQueue
可以通过设置最大并发数,设置优先级,添加依赖关系等调整执行顺序 NSOperationQueue
设置可以跨队列设置依赖任务,但是GCD只能通过设置串行队列,或者添加barrier任务,才能控制执行顺序NSOperationQueue
因为面向对象,所以可以支持KVO,可以监测operation的执行状态
当只是简单用到异步操作,没有特别复杂的线程关系管理,推荐使用GCD
当考虑到异步操作之间的事务性、顺序性、依赖关系,此时GCD需要自己写更多代码实现,而NSOperationQueue已经内建了这些支持