vlambda博客
学习文章列表

iOS面试题:多线程在iOS开发中的应用

前言

线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。

I 基础概念

1、进程:系统中正在运行的一个应用程序 2、线程:1个进程想要执行任务,必须得有线程。即线程是进程的基本执行单元

1)线程的串行:一个线程中任务的执行是串行的

2)多线程的原理:同一时间,CPU只能处理一条线程。多线程并发执行,其实就是CPU快速地在多条线程之间调度(如果CPU调度的时间足够快,就造成了多线程并发执行的假象)

  • NSThread
  1. 多线程基础、pthread、开启线程的3种方式

  2. 线程的状态、线程安全问题、线程间的通信

  • GCD
  1. 同步方法和异步方法、队列的使用、线程间的通信

  2. 延迟执行、一次性代码、队列组、单例模式-ARC、单例模式-MRC、用宏抽取单例模式

  • NSOperation
  1. NSOperation和NSOperationQueue的概念理解、NSInvocationOperation、NSBlockOperation

  2. NSOperationQueue的常见方法、最大并发数、操作依赖、队列的取消\暂停\恢复

II 多线程在iOS开发中的应用

1、什么是主线程:一个iOS程序运行之后,默认会开启一条线程,称为“主线程”,或者“UI线程” 2、主线程的主要作用:显示、刷新UI界面;处理UI事件(点击、滚动、拖拽)。

2.1 主线程的使用注意事项:

别将比较耗时的操作放到主线程中

一般的解决方案就是将那些耗时的操作放到另外一个线程中去执行,多线程编程是防止主线程堵塞,增加运行效率的最佳方法。

2.2 iOS中多线程的实现方案

这里写图片描述

iOS支持多个层次的多线程编程,层次越高的抽象程度越高,使用也越方便,也是苹果最推荐使用的方法。

根据抽象层次从低到高依次列出iOS所支持的多线程编程方法:

  • Thread :是三种方法里面相对轻量级的,但需要管理线程的生命周期、同步、加锁问题,这会导致一定的性能开销
  • Cocoa Operations:是基于OC实现的,NSOperation以面向对象的方式封装了需要执行的操作,不必关心线程管理、同步等问题。NSOperation是一个抽象基类,iOS提供了两种默认实现:NSInvocationOperation和NSBlockOperation,当然也可以自定义NSOperation.
  • Grand Central Dispatch(简称GCD,iOS4开始支持):提供了一些新特性、运行库来支持多核并行编程,它的关注点更高:如何在多个cpu上提升效率

2.3 线程状态

这里写图片描述

see also

进程间的实时通讯方案:local socket(解决扩展和容器应用的实时通讯问题)

https://blog.csdn.net/z929118967/article/details/109616038