Objective-C 多线程编程与 GCD(上)| 青训营笔记

111 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第8天

Objective-C 多线程编程与 GCD(上)| 青训营笔记

进程与线程

  1. 进程(Process):资源分配最小单位
  2. 线程(Thread):调度执行最小单位
  3. 进程与线程
    1. 同一进程下的线程共享进程的内存空间
      1. 代码段
      2. 数据段
      3. 进程级资源(打开文件)
    2. 一个进程可以包含多个线程
    3. 每个app一个进程,多个线程,一个进程崩溃不会影响其他进程,一个线程崩溃会影响同一个进程下的其他线程

多线程基本概念

串行、并行、并发

  1. 串行:多个任务依次执行,先进先出
    1. 核酸检测:一个队伍一个窗口
  2. 并行:多个任务同时执行
    1. 核酸检测:多个队伍多个窗口
  3. 并发:多个任务在一段时间内需要被执行
    1. 核算检测:很多人在上午要做完核算

线程生命周期

五个状态:出生、就绪、运行、阻塞、死亡

Runloop事件循环:让线程在适当的时间处理任务不会退出

  1. iOS App中,主线程(main函数)Runloop在程序运行时就会启动,其他线程Runloop需要手动开启
  2. 主线程
    1. 用于绘制UI和处理UI交互事件,又称为UI线程
    2. 耗时操作方案主线程的主循环执行,引起app卡顿
      1. 将耗时操作放到子线程
  3. 多线程优劣
    1. 优点
      1. 提高程序执行效率
      2. 提高资源利用率
    2. 缺点
      1. 创建线程、线程调度有成本,大量线程降低程序性能
      2. 会出现线程安全问题,增加了程序设计的复杂度

IOS多线程实现方案

  1. POSIX Thread可移植
    1. 类UNIX系统通用多线程API:pthread命令
    2. C接口、跨平台、可移植
    3. 工程上使用少:需要手动管理线程生命周期
  2. NSThread:Pthread面向对象封装
    1. OC接口,可以通过KVO监听部分属性(是否执行中、结束、取消)
    2. 工程上使用少:需要手动管理线程生命周期
    3. 一般用于调试
  3. GCD:Grand Central Dispatch异步执行任务的技术
    1. 已经抽象了任务和队列的概念:定义想执行的任务,并追加到适当的派发队列
    2. 好处:
      1. 自动使用更多CPU内核
      2. 自动管理线程的生命周期
  4. NSOperation/NSOperatonQueue:基于GCD的多线程编程接口
    1. OC接口
    2. 可指定任务依赖关系,控制执行顺序
    3. 支持设定任务并发数
    4. 支持取消任务,可用KVO监听任务状态

未完待续