美文网首页
六、多线程

六、多线程

作者: Miss_DQ | 来源:发表于2021-07-16 20:09 被阅读0次

注:本文集为自己准备面试时,系统复习的笔记,如大家有兴趣,欢迎阅读并指正

1.GCD

  • 同步/异步 和 串行/并发
    • 同步串行。在主线程运行
    • 同步并行。
    • 异步串行。
    • 异步并行。
  • dispatch_barrier_async
    • 实现多读单写?
      读者、读者并发
      读者、写者互斥
      写者、写者互斥
-(id)objectForKey:(NSString *)key {
  __block id obj;
  dispatch_sync(concurrent_queue,^{
    obj = [userCenterDic objectForKey:key];
  });
  return obj;
}

- (void)setObject:(id)obj forKey:(NSString *)key {
  // 异步栅栏调用设置数据
  dispatch_barrier_async(concurrent_queue,^{
    [userCenterDic setObject:obj forKey:key];
  });
}
  • dispatch_group_async()
    使用GCD实现需求:A、B、C三个任务并发,完成后在执行任务D?

2.NSOperation

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

  • 添加任务依赖
  • 任务执行状态控制
    • 可以控制哪些装态?
      isReady 、isExecuting、isFinished、 isCancelled
      如果只重写main方法,底层控制变更任务执行完成状态,以及任务退出。
      如果重写了start方法,自行控制任务状态
  • 最大并发量

3.NSThread:实现常驻线程

启动线程
start() - 创建pthread - main() - [target perfomSelector: withObject: ] - exit()

4.多线程与锁:线程同步和资源共享

  • iOS有哪些锁?
    • @synchronized:用来创建单例对象的时候使用。保证多线程创建对象唯一
    • atomic:属性关键字,保障赋值操作线程安全
    • OSSpinLock:自旋锁,循环等待询问,不释放当前资源。专门用于轻量级数据访问,简单的+1/-1操作
    • NSLock:如果重入会出现死锁问题,需要使用递归锁。
    • NSRecursiveLock:递归锁
    • dispatch_semaphore_t:信号量
      • dispatch_semaphore_create();
      • dispatch_semaphore_singal();
5.补充
  • 线程各自特点?
    GCD:简单的线程同步,子线程分派,多读单写问题解决
    NSOperation:AFN,SDW。方便任务的状态控制,添加依赖,移除依赖
    NSThread:常驻线程。

  • [self performSelector:withObject:afterDelay]:方法要被执行需要有runloop支持,子线程中执行该方法可能没有启动runloop导致该代码不执行。

  • NSOperation对象在Finished之后是怎样从queue当中移除掉的?
    通过KVO方式将对象从queue中移除

  • 你都用过哪些锁?结合实际谈谈你是怎样使用的?
    NSLock、dispatch_semaphore_signal

相关文章

  • 六、多线程

    注:本文集为自己准备面试时,系统复习的笔记,如大家有兴趣,欢迎阅读并指正 1.GCD 同步/异步 和 串行/并发同...

  • iOS | 面试 - 多 线 程

    iOS | 面试知识整理 - 多 线 程 (六) 1.什么是多线程? 多线程是指实现多个线程并发执行的技术,进而提...

  • (六)多线程附录

    1、线程的加入 线程在启动后,并不一定能立即争抢到CPU,但使用join()方法后,线程会优先抢到CPU,示例代码...

  • Android多线程(六)

    CAS CAS(Compare And Swap)是一种无锁原子操作。具体是对比内存中的值与当前线程中我们预期的值...

  • 多线程基础(六)

    之前的思路会导致一个问题:A:如果消费者先抢到了CPU的执行权,就会去消费数据,但是现在的数据是默认值,没有意义,...

  • 多线程学习(六)

    一:设计模式 “设计模式”:代码的一些写法(这些写法跟常规写法不怎么一样):程序灵活,维护方便,但是别人接管、阅读...

  • JAVA面试汇总(二)多线程(六)

    JAVA多线程内容比较多,今天写完了第六篇,后边还有七(肯定最后一篇了)。 如何保证多线程读写文件的安全?(1)读...

  • java多线程学习(六)

    Executor框架 Runnable/Callable接口是对任务处理逻辑的抽象,Executor是对任务的执行...

  • 六、linux多线程操作

    pthread线程库线程操作,包括线程的创建,线程的设置,线程同步,线程取消等操作。程序中多线程操作多适用于同时执...

  • 多线程六脉神剑

    多线程六脉神剑分类 手太阴肺经 BLOCKING Queue 手太阳小肠经 信号量 适合控制顺序 手厥阴心包经 s...

网友评论

      本文标题:六、多线程

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