美文网首页
iOS线程基础

iOS线程基础

作者: 十年开发初学者 | 来源:发表于2021-08-07 17:23 被阅读0次

    线程

    • 线程是进程的基本单元,一个进程的所有任务都在线程中执行
    • 进程要想执行任务,必须得有线程,进程至少要有一天线程
    • 程序启动会默认开启一条线程,这条线程被称为主线程

    进程

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

    iOS是单进程,Mac是多进程

    线程和进程的关系

    • 地址空间,同一进程的线程共享本进程的地址,而进程之间的地址时相互独立的
    • 资源拥有,同一进程内的线程共享本进程的资源,如I/O,CPU等,但是进程之间的资源是独立的
      1: ⼀个进程崩溃后,在保护模式下不会对其他进程产⽣影响,但是⼀个线程崩溃整个进
      程都死掉。所以多进程要⽐多线程健壮。
      2: 进程切换时,消耗的资源⼤,效率⾼。所以涉及到频繁的切换时,使⽤线程要好于进
      程。同样如果要求同时进⾏并且⼜要共享某些变量的并发操作,只能⽤线程不能⽤进程
      3: 执⾏过程:每个独⽴的进程有⼀个程序运⾏的⼊⼝、顺序执⾏序列和程序⼊⼝。但是
      线程不能独⽴执⾏,必须依存在应⽤程序中,由应⽤程序提供多个线程执⾏控制。
      4: 线程是处理器调度的基本单位,但是进程不是。
      5: 线程没有地址空间,线程包含在进程地址空间中

    多线程意义

    优点:

    • 适当提高程序的执行效率
    • 适当提高资源的利用率(I/O,CUP等)
    • 线程上的任务执行完成后,线程会自动销毁

    缺点:

    • 开启线程需要占用一定的内存空间(默认情况下,每个线程512KB)
    • 如果开启大量的线程,会占用大量的内存空间,降低程序性能
    • 线程越多,CPU在调度线程上的开销就越大
    • 程序设计更加复杂,比如线程间的通讯,多线程的数据共享

    iOS多线程原理

    WX20210802-172729@2x.png

    我们所看到的并发,其实是CPU在多个任务之间快速切换,这并不是真正意义的并发,只有多核,才会实现真正意义的并发

    时间片

    时间片:cpu在多个任务之间快速切换,这个时间间隔就是时间片

    • 单核cpu同一时间,只能处理一条线程
    • 多线程同时执行:其实时CPU快速的在多个线程之间的切换,只要CPU的调度足够快,就会造成多线程的同时执行
    • CPU 会在N个线程之间切换,消耗大量的CPU资源
    • 线程越多,每条线程被调度的次数会降低,线程的执行效率会降低

    多线程技术方案

    WX20210802-174128@2x.png

    线程的生命周期

    image.png
    • 创建:new新建线程后,调用start,并不会立马执行,而是进入就绪状态(Runable)等待着CPU调度
    • 运行:CPU调度当前的线程,来进入运行状态,执行任务,如果当前的线程在执行任务,CPU这从可调度池中来调用其他线程,执行任务
    • 阻塞:在运行中,如果碰到了sleep或者同步锁的情况,会进入阻塞状态,所有线程都将停止,等待sleep结束或者同步锁解锁,回到Runable 就绪状态
    • 死亡:运行中的任务,在任务执行完或被强制退出时,线程自动进入Dead销毁。

    线程池调度

    image.png

    饱和策略

    • AbortPolicy 直接抛出RejectedExecutionExeception异常来阻⽌系统正常运⾏
    • CallerRunsPolicy 将任务回退到调⽤者
    • DisOldestPolicy 丢掉等待最久的任务
    • DisCardPolicy 直接丢弃任务

    任务执行速度的影响因素

    • CPU的调度情况
    • 任务的复杂度
    • 线程的优先级
    • 线程状态

    优先级反转

    • IO密集型,频繁的等待线程,容易被杀死,就会出现优先级提升
    • CPU密集型

    优先级影响因素

    • 用户指定
    • 等待的频繁度
    • 长时间不执行,会提升优先级

    相关文章

      网友评论

          本文标题:iOS线程基础

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