多线程相关

1. GCD
1. 同步/异步 串行/并发
dispatch_sync(serial_queue, ^{//任务})

dispatch_async(serial_queue, ^{//任务})

dispatch_sync(concurrent_queue, ^{//任务})

dispatch_async(concurrent_queue, ^{//任务})
复制代码

  • 死锁
    • 原因
      • 队列引起的循环等待
      • 主队列中所提交的任务无论是同步方式还是异步方式,都要在主线程中执行
      • 同步提交的任务,不论是提交到并发还是串行队列,都在当前线程执行

2. dispatch_barrier_async
  • 并发队列实现多读单写
3. dispatch_group
// 创建一个group
    dispatch_group_t group = dispatch_group_create();
    
    // for循环遍历各个元素执行操作
    for (NSURL *url in arrayURLs) {
        
        // 异步组分派到并发队列当中
        dispatch_group_async(group, concurrent_queue, ^{
            
            //根据url去下载图片
            
            NSLog(@"url is %@", url);
        });
    }
    
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        // 当添加到组中的所有任务执行完成之后会调用该Block
        NSLog(@"所有图片已全部下载完成");
    });
复制代码
2. NSOperation
配合NSOperationQueue实现多线程方案
  • 特点
    • 可以添加任务依赖
    • 任务执行状态控制
      • 状态
        • isReady
        • isExecuting
        • isFinished
        • isCancelled
      • 如果只重写main方法,底层控制变更任务执行完成状态,以及任务退出
      • 如果重写了start方法,自行控制任务状态
    • 最大并发量
    • 支持KVO
3. NSThread
  • 启动流程
  • 结合Runloop实现常驻线程
  • Start方法
4. 多线程与锁
  • iOS中的锁
    • @synchronized
      • 一般在创建单例对象的时候使用
    • atomic
      • 修饰属性的关键字
      • 对被修饰对象进行原子操作(不负责使用)
    • OSSpinLock
      • 自旋锁
      • 循环等待询问,不释放当前资源
      • 用于轻量级数据访问,简单的int值+1/-1操作
    • NSLock
    • NSRrecursiveLock - 递归锁
    • dispatch_semaphore_t - 信号量
      • dispatch_semaphore_create(1)
        • 内部实现
      • dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
        • 内部实现逻辑
      • dispatch_semaphore_signal(semaphore)
        • 内部

转载于:https://juejin.im/post/5cd44264f265da0379419326

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值