多线程面试题1

preview
需积分: 0 1 下载量 123 浏览量 更新于2022-08-04 收藏 520KB PDF 举报
在 IT 面试中,多线程是一个重要的考察点,尤其在 iOS 开发中。以下是对多线程面试题的详细解释: 一、进程与线程的理解 1. **进程**:进程是操作系统分配资源的基本单位,它可以看作是一个应用程序在运行时的实例。在 iOS 中,每个进程都有自己的独立内存空间,可以理解为手机上的一个 App。进程之间相互独立,互不影响。 2. **线程**:线程是程序执行的最小单元,是进程内部执行任务的实体。每个进程至少有一个线程,即主线程,用于执行程序的主要任务。线程共享其所属进程的资源,包括内存空间和文件等。 二、进程与线程的关系 线程是进程中的执行单元,负责执行进程中的具体任务。CPU 分配资源和调度的基本单位也是线程。一个进程可以包含多个线程,它们并发执行以提高效率。然而,即使在多线程环境下,CPU 也无法真正同时处理多个线程,而是通过快速切换线程来实现并发执行的假象。 三、多进程与多线程 1. **多进程**:当计算机系统中存在多个同时运行的进程时,称为多进程。系统进程(如操作系统组件)和用户进程(由用户启动的应用)共同存在于系统中。进程是资源分配的基本单位,而线程是执行单位。 2. **多线程**:在同一时间,CPU 只能处理一个线程,但实际上通过快速切换实现并发执行。多线程可以提高程序执行效率和资源利用率,但也会带来额外的开销,如线程创建、管理和调度成本,以及可能的竞态条件和数据同步问题。 四、任务与队列 1. **任务**:任务是在线程中执行的代码片段,通常以 Block 形式存在。在 GCD (Grand Central Dispatch) 中,任务可以同步或异步地添加到队列中。 2. **队列**:队列是按先进先出(FIFO)原则存放任务的数据结构。在 GCD 中,有两种队列类型: - **串行队列**:一次仅执行一个任务,确保任务顺序执行,不会开启多个线程,除非队列是主队列。 - **并发队列**:允许多个任务并发执行,可以开启多个线程,但在异步执行时才有并发效果。 五、iOS 中的多线程技术 在 iOS 开发中,多线程主要通过以下三种方式实现: 1. **NSThread**:开发者可以手动创建和管理线程,负责启动和资源回收。通过 `performSelector` 系列方法也可以实现线程切换,本质上也是基于 NSThread。 2. **NSOperationQueue**:基于 GCD 的高级接口,提供了任务依赖、取消、优先级等更丰富的功能,易于理解和使用。 3. **GCD (Grand Central Dispatch)**:苹果提供的底层多线程框架,使用 C 语言接口,高效且灵活。支持串行队列和并发队列,以及同步和异步任务执行。 理解并熟练掌握这些概念和技术,对于 iOS 开发者来说至关重要,因为它们直接影响到应用的性能和用户体验。在面试中,能够清晰地阐述这些知识点,将有助于展示你的专业技能和解决问题的能力。