美文网首页
iOS开发--多线程基础

iOS开发--多线程基础

作者: 那时J花开 | 来源:发表于2018-05-29 16:30 被阅读0次

1.多线程的原理

  • 同一时间, CPU只能处理一个线程的任务, 同一时间只有一条线程在执行
  • 一个线程中的任务是串行的, 如果要在一个线程中执行多个任务, 必须一个一个串行执行
  • 多线程的并发, 其实是CPU在多个线程间进行快速的调度
  • 如果CPU调度的速度足够快, 就会造成线程并发执行的假象
  • 所以不能随便开辟新的线程, 如果同时期开辟非常多条线程, 会使得CPU开销非常大

2.多线程的优缺点

  • 优点: 多线程可以适当的提高资源的利用率(比如CPU和内存), 提高程序的执行效率
  • 缺点: 创建线程的资源成本(iOS下): 一般需要90ms的创建时间, 栈空间(子线程512KB, 主线程1MB, 可以使用setStackSize:来设置, 但最小为16K, 并且必须是4k的倍数)
    • 如果同时期开辟非常多条线程, 会使得CPU开销非常大, 反而会降低程序的执行效率
    • 线程过多会使得代码过于冗余. 线程间的通讯、数据共享等会使得程序设计更加复杂

3. 多线程在开发中的应用

  • 主线程
    • 一个iOS程序运行后, 会默认开启一条线程, 只要程序没有被杀死, 这条线程会一直存在并运行. 这条线程被称为"主线程", 或者"UI线程".
    • 主线程的主要作用:
      • 显示/刷新UI
      • 处理UI事件(点击, 拖拽等)
    • 主线程的使用注意
      • 比较耗时的操作不要放在主线程进行(如各种循环, 大量数据的处理, 网络数据请求等)
  • iOS中的多线程实现
    • pthread(几乎不用)
      • 一套适用于Unix/Linux/Windows系统的通用多线程API, C语言实现
      • 其生命周期由程序员自己手动管理, 使用难度较大. 优点是跨平台/可移植
    • NSThread(偶尔使用)
      • 基于pthread封装的面向对象的多线程技术. 使用更加面向对象, 简单易用,可直接操作线程对象. OC语言实现
      • 其生命周期由程序员自己手动管理
    • GCD(经常使用)
      • 旨在替代NSThread等线程技术, C语言实现, 能够充分利用设备的多核
      • 其生命周期自动管理
    • NSOperation(经常使用)
      • 基于GCD的面向对象实现, 比GCD更加面向对象
      • 其生命周期自动管理

相关文章

网友评论

      本文标题:iOS开发--多线程基础

      本文链接:https://www.haomeiwen.com/subject/wxrajftx.html