原文地址iOS实录16:GCD小结之控制最大并发数,本文旨在做点笔记,加强记忆。
CGD并发的困扰

  1. iOS中要使用并发队列合理利用多核CPU资源
  2. 多线程并发依靠时间片轮转方法实现,线程创建、销毁、上下文切换等会消耗CPU资源
  3. iPone中不能无节制地提高并发,会抢占CPU资源,甚至会挤占掉主线程CPU资源(极端情况)
  4. 部分任务内部会有全局的锁,导致休眠、阻塞(如CoreText绘制时CGFont内部锁),会导致线程数大量增加

优雅的NSOperationQueue

  1. NSOperation是iOS提供的工作队列,开发者只需将任务封装在NSOperation的子类(NSBlockOperation、NSInvocationOperation或自定义NSOperation子类)中,然后添加进NSOperationQueue队列,队列就回按照优先顺序及工作的从属依赖关系(如果有的话)组织进行。

  2. NSOperationQueue依靠maxConcurrentOperationCount控制并发数,默认-1,0不执行任何任务,1表示串行队列,大于1则表示是并行。

  3. SDWebImage和AFNetworking就是采用NSOperationQueue来控制最大并发数的。

  4. NSOperationQueue底层使用GCD来实现

  5. GCD可以使用信号量控制最大并发数