多线程

作者: Oh丶Really | 来源:发表于2020-07-24 01:19 被阅读0次
  • GCD
  • NSOperation
  • NSThread
  • 多线程与锁

一、GCD

  • 同步、异步 和 串行、并发
  • dispatch_barrier_async(异步栅栏调用,解决多读单写问题)
  • dispatch_group

1、同步、异步 和 串行、并发

image

同步串行

问题1:
image
原因:队列引起的循环等待
image
问题2:
image
分析:
image
问题3:
image

异步串行

异步并发

问题1:
image
分析:GCD下没有对应的RunLoop的,而performSelector方法会在对应的RunLoop下执行,又此时无对应的RunLoop,所以会失效

2、dispatch_barrier_async

问题:怎样利用GCD实现多读单写
image

模型:


image

解决代码:


image
image

3、dispatch_group

问题:使用GCD实现,A、B、C三个任务并发,完成后执行任务D?

代码:


image image

二、NSOperation

需要和 NSOperationQueue 配合使用来实现多线程方案

  • 添加任务依赖
  • 任务执行状态控制
  • 可以控制最大并发量

1.任务执行状态控制

哪些状态?
  • isReady
  • isExecuting
  • isFinished
  • isCancelled
状态的控制:
  • 如果只重写main方法,底层控制变更任务执行完成状态,以及任务退出
  • 如果重写了start方法,自行控制任务状态
问题:系统是怎样移除一个 isFinished = YES 的 NSOperation?
解答:通过KVO;

三、NSThread

启动流程:


image

Start方法实现原理:

  • 内部创建了一个 pthread 线程,当执行的 tatrget 的 selctor 方法执行时,系统会进行线程的退出操作
  • 如果想维持一个常驻线程,需要在 NSThread 对应的 selector 方法中维护一个 RunLoop 时间循环

四、多线程与锁

iOS中常用的锁:

  • @synchronize
  • atomic
  • OSSpinLock
  • NSRecursiveLock
  • NSLock
  • dispatch_semaphore_t

@synchronize

  • 一般在创建单例对象的时候使用,来保证多线程情况下创建对象唯一

atomic

  • 修饰属性关键字
  • 对被修饰的对象进行原子操作(不负责使用)
image

OSSpinLock

  • 自旋锁,循环等待询问,不释放当前资源
  • 用于轻量级数据访问,例如简单的 int 值 +1/-1 操作

NSLock

  • 一般用来解决线程同步问题
问题:
image
解决:-- NSRecursiveLock 递归锁
image

dispatch_semaphore_t

相关函数:


image
1、dispatch_semaphore_create()
image
2、dispatch_semaphore_wait()
image
3、dispatch_semaphore_sigal()
image

总结:

  • 怎样用GCD实现多读单写?
  • 几种多线程技术和各自的特点?
  • NSOperation 对象在 Finished 之后怎样从 queue 中移除的?
  • 用过哪些锁?怎样使用的?

相关文章

  • iOS多线程 NSOperation

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程 pthread、NSThread

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程: GCD

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程运用

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程基础

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • 多线程介绍

    一、进程与线程 进程介绍 线程介绍 线程的串行 二、多线程 多线程介绍 多线程原理 多线程的优缺点 多线程优点: ...

  • iOS进阶之多线程管理(GCD、RunLoop、pthread、

    深入理解RunLoopiOS多线程--彻底学会多线程之『GCD』iOS多线程--彻底学会多线程之『pthread、...

  • iOS多线程相关面试题

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • 多线程之--NSOperation

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • iOS多线程之--NSThread

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

网友评论

      本文标题:多线程

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