iOS多线程总结

本文主要介绍iOS中多线程的基本概念,此为笔试、面试常考问题,是iOS总的重要概念。

上一篇:

Swift内存管理机制.md


  • Foundation

    1. 多线程:同时对多个任务加以控制,要求程序停下手头的工作改为处理其他一些问题,再返回主线程。提高系统的效率(通过资源的利用率),有多中方式来实现多线程。 > 同时对多个任务加以控制;程序设计问题,要求停下手头的工作,改为处理其他的一些问题,在返回主线程;多种途径可以达到这个目的;

    多线程是为了同步完成多项任务,不是为了提高运行效率(用CPU硬件提高),是为了提高资源的使用效率来提高系统的效率。线程实在同一时间需要完成多项任务的时候执行。

2. 基本概念:
    * 进程:

        > 进程(progress)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统的基础。

    *进程指的是系统正在运行的一个应用程序,每一个程序都是一个进程,进程之间是相互独立的,每个进程都运行在其专用且受保护的内存空间*

    * 线程: 

        > 线程,是程序执行流的最小单元,线程是程序中一个单一的顺序控制流程。是进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位,指运行中的程序的调度单位。

    *简单来说,1个进程想要执行任务,必须得有线程。*

        1. 线程中任务的执行是串行的
        2. 要在1个线程中执行多个任务,那么只能一个一个地按顺序执行这些任务
        3. 也就是说,在同一时间内,1个线程只能执行1个任务
        4. 由此可以理解线程是进程中的1条执行路径

    * 多线程:

        > 多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。

    **原理** :

        1. 同一时间,CPU只能处理一条线程,只有一条线程在工作(执行)
        2. 多线程并发(同时)执行,其实是CPU快速的在多个线程之间的调度(切换)
        3. 如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象

        Note:
             多线程并发,并不是cpu在同一时刻同时执行多个任务,只是CPU调度足够快,造成的假象。 

     **优点** :

        1. 适当提高资源的利用率(CPU,内存利用率)
        2. 适当提高程序的执行效率

     **缺点** :

        1. 开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能
        2. 线程越多,CPU在调度线程上的开销就越大
  • iOS开发中的应用

    • 主线程

      一个iOS程序运行后,系统会默认开启一条线程,称为“主线程”或者“UI线程”

      作用:

      • 显示\刷新UI界面
      • 处理UI事件(点击事件,滚动事件,拖拽事件等)

      注意: * 刷新UI必须放在主线程 * 别将耗时的操作放到主线程中去 * 耗时的操作会卡住主线程,严重影响UI的流畅度

    • 实现方案:

      • pthread: 一套通用的多线程API,适用于Unix/Linux/Windows等操作系统,款平台\可移植性,程序员管理线程生命周期(C语言)
      • NSThread: 使用更加面向对象,简单易用,可直接操作线程对象,程序员管理线程生命周期(OC语言)
      • GCD: 充分利用设备多核,旨在替代 NSThread 等线程技术,程序员自动管理线程生命周期(C语言)
      • NSOperation: 基于GCD,比GCD多了一些更加简单实用的功能,使用更加面向对象,程序员自动管理线程(OC语言)

测试结果:

图片1 图片2


下一篇:

具体用法和实现

  1. 多线程(一)NSThread
  2. 多线程(二)GCD
  3. 多线程(三)NSOperation