iOS 多线程

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)
你用过设么锁?结合实际谈谈你怎么使用的?

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ​ 前言:这可能是史上最全面的一篇iOS 多线程博客了(王婆卖瓜一番😄),从多线程的基本概念,进程的概念,引出i...
    阿饼six阅读 887评论 2 11
  • iOS多线程编程 基本知识 1. 进程(process) 进程是指在系统中正在运行的一个应用程序,就是一段程序的执...
    陵无山阅读 6,352评论 1 14
  • 一 iOS多线程介绍 二 线程同步方案 一 iOS多线程介绍 首先我们先了解一下关于线程的几个概念: 1 什么是进...
    当前明月阅读 657评论 0 2
  • iOS多线程实践中,常用的就是子线程执行耗时操作,然后回到主线程刷新UI。在iOS中每个进程启动后都会建立一个主线...
    jackyshan阅读 1,575评论 2 12
  • 多线程的基本概念 进程:可以理解成一个运行中的应用程序,是系统进行资源分配和调用的基本单位,是操作系统结构的基础,...
    小白进城阅读 1,761评论 0 1

友情链接更多精彩内容