iOS多线程-概述

267 阅读3分钟

耗时操作

操作就是执行一段代码,耗时操作就是指执行某段代码所需要的时间略长

  • 常见操作耗时比较

    • 空的for循环不耗时
    • 操作内存的栈区速度很快(栈区存储空间地址是连续的)
    • 操作内存的常量区速度很快(内存空间只开辟一次)
    • 操作内存的堆区速度相对栈区和常量区要慢些(堆区内存空间不连续,需要寻址)
    • I/O操作最耗时:把数据写入到磁盘、屏幕、打印机等等都叫输出,从磁盘、屏幕、打印机等等取到数据,都叫输入(I:input输入,O:output输出)
    • 延迟执行
    • 网络请求也是一个耗时操作
  • 耗时操作对UI交互的影响:卡死了主屏幕,直到耗时操作执行完,屏幕的交互才能正常进行

  • 解决耗时操作卡顿UI的办法:多线程技术(核心思想:把耗时操作放在后台执行,不让耗时操作使UI卡顿)

同步&异步

  • 任务:就是指程序执行某段代码,这就叫任务
  • 同步:就是一个任务接着一个任务的执行,上一个任务没有执行完,不能执行下一个任务
  • 异步:可以同时处理多个任务,异步也是多线程的代名词

进程&线程

  • 进程:系统中正在运行的一个应用程序叫进程
  • 线程:线程是进程的基本执行单元,进程中的所偶任务都在线程中执行

主线程

  • 一个程序运行后,默认会开启一个线程,称为主线程或UI线程
    • 它主要只负责界面的显示,以及界面的交互
    • 其他除了主线程以外的所有线程都叫子线程
    • 把耗时操作放在子线程里,会让界面更加流畅

    number值为1的线程才是主线程

多线程

  • 原理:单核CPU在多条线程之间快速切换

    • 切换时会记录当前任务的状态,状态包括:
    1. 代码执行行数
    2. 当前声明的变量
    3. 变量中拥有的数据
  • 优点

    • 能“适当”提高程序的执行效率
    • 能“适当”提高CPU和内存的利用率
    • 线程上的任务执行完成后,线程会自动销毁,节省内存
  • 缺点

    • 开启线程需要占用一定的内存空间,如果开启的线程过多,会占用大量的CPU资源,降低程序的性能
    • 占用内存空间:默认情况下,子线程512KB,主线程1M (iOS8中,主线程512KB)
    • 线程越多,CPU调度线程的开销就越大(时间开销,空间开销)
    • 程序设计更加复杂:比如线程之间的通信,多线程的数据共享
  • 多线程实现方案

    NSTread在ARC以后也不需要程序员管理了