美文网首页
iOS 多线程

iOS 多线程

作者: KAKA_move | 来源:发表于2021-04-03 02:15 被阅读0次

    GCD

    NSOperation(NSNetWorking和图片异步下载)

    NSThread (常驻线程的实现)

    多线程与锁(线程间同步和资源共享)

    GCD

    • 同步/异步 和 串行/并发

    • dispatch_barrier_async

    • dispatch_group

    • GCD 同步/异步 和 串行/并发

    1. 同步串行

    死锁,原因

    另一个例子:

    1. 同步并发

    答案:12345

    1. 异步串行
    1. 异步并发

    dispath_barrier_async()

    • 多读单写怎么实现?
      读者和读者并发
      读者和写者互斥
      写者和写者互斥

    异步栅栏调用

    • dispatch_group
      使用GDC实现需求ABC并发,并发执行完成后执行任务D
    1. 创建并发队列
    2. 创建一个group,执行在一组中
    3. dispatch_group_notify

    NSOPeration

    • 特点
      可以添加以来(GCD和NSThread没有)
      任务执行状态控制
      设置并发量的控制

    • 执行状态控制
      isReady
      isExcusing
      isFinished
      isCancelled

    如重写main方法,底层控制。
    如重写start方法,我们自行控制状态。
    源码分析

    系统是通过KVO来移除一个isFinished=YES的NSOperation的

    NSThread

    启动流程
    start -> 创建Pthread -> main() -> perforSelector (runloop) -> exict()

    • start方法
      创建函数,在main函数中创建一个for循环,实现一个常驻的线程

    • @synchronized
    • atomic
    • NSSpinlock
    • NSRecursiveLock
    • NSLock
    • dispatch_semaphore_t
    • @synchronized
      一半是使用单利对象使用的
    • atomic
      修饰属性和关键字
      原子性对复制操作有现成安全性

    • OSSpinLock自旋锁
      循环等待询问,不释放当前资源
      类似有个while循环

    轻量级数据的访问,简单的int值+1 -1操作,系统使用自旋锁

    • NSLock

    上锁和解锁成对出现

    冲入原因死锁,换成递归锁:

    • NSRecursiveLock
      递归锁

    • dispatch_semaphore_t
      信号量

    dispatch_semaphore_creat
    dispatch_semaphore_wait(信号量,时间)
    dispatch_semaphore_signal(信号量)

    多线程

    怎么用GCD实现单读多写?
    几种多线程计数的特点?
    GCD简单的多线程,NSOparation的点在第三方中用,NSThread是实现一个常驻线程
    NSOperation对象在FInished之后怎么存quene中移除掉的?(KVO)
    你用过设么锁?结合实际谈谈你怎么使用的?

    相关文章

      网友评论

          本文标题:iOS 多线程

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