问题1:ios系统多线程当中为我们提供了哪几种技术方案? / 接触过的多线程有哪些?
答案:
一般回答上来这三个即可,
pthread
选答即可
问题2: 线程与进程之间关系? / 你怎么了解线程与进程?
进程
-
进程
是指在系统中正在运行的一个应用程序
- 每个进程之间都是
独立
的, 每个进程均运行在其受保护的内存空间中 - 通过活动监控器可查看mac系统中所开启的线程
线程
- 线程是进程的基本单元, 一个进程的所有任务都在线程中执行
- 进程想要执行任务, 必须有线程, 进程至少要有一条线程
- 程序启动会默认开启一条线程, 这条线程被称为
主线程
问题3: 多线程优缺点
优点:
- 提高程序执行效率
- 提高资源利用率
- 线程执行完任务后会自动销毁
缺点:
- 开启线程需要占用额外内存空间。大量线程的开启, 降低程序性能
- 线程越多CPU开销越大
- 线程越多, 设计越复杂, 线程间通信越复杂
问题4: NSThread / NSOperation / GCD 优缺点
NSThread:
优点:
- 轻量级低, 使用简单
- 面向对象, 可直接操作线程对象
缺点
- 需要自己管理线程生命周期, 线程同步
GCD
GCD底层
是C语言
实现
优点:
- 自动管理线程线程的生命周期(线程创建、线程调度、线程销毁)
- 充分使用设备多核CPU并行运算
缺点
- 无法取消加入队列中的任务
- 队列任务执行顺序先进先出, 随意调配比较繁琐
- 不支持KVO监听
- 不能设置最大并发数
NSOperation
NSOperration
基于cocoa框架
实现, 相当于基于GCD
上面封装的, NSOperationQueue
是高级的dispatch_queue_t
;
优点:
- 实现多线程更加面向对象, 代码简洁
- NSOperration可以通过KVO监控操作进行的状态 (准备、执行中、完成、被取消)
- NSOperationQueue可以设置最大并发数量 (setMaxConcurrentOperationCount:)
- NSOperration可以很容易管理各个操作之间的依赖关系
- NSOperration可以取消未运行任务
缺点
- 多核CPU上线程切换的时间比较长 效率较
GCD
偏低一些,