XZHGCDDispatcher 0.2.1

XZHGCDDispatcher 0.2.1

xiongzenghui 维护。



  • 撰写者
  • xiongzenghui

XZHGCDDispatcher

CI Status Version License Platform

XZHGCDDispatcher基于YYKit中的YYDispatchQueuePool组件。

示例

要运行示例项目,首先克隆仓库,然后在示例目录下运行 pod install

需求

此库需要iOS 8.0+Xcode 8.0+

安装

XZHGCDDispatcher可以通过CocoaPods获得。要安装它,只需将以下行添加到您的Podfile中

pod 'XZHGCDDispatcher'

使用

使用默认全局单例连接池实例入队

for (int i = 0; i < 100; i++) {
    switch ((i%5)) {
        case 0: {
            XZHAsyncWithQOSUserInteractive(^{
                NSLog(@"task %d: %@", i, [NSThread currentThread]);
            });
        }
            break;
        case 1: {
            XZHAsyncWithQOSUserInitiated(^{
                NSLog(@"task %d: %@", i, [NSThread currentThread]);
            });
        }
            break;
        case 2: {
            XZHAsyncWithQOSUtility(^{
                NSLog(@"task %d: %@", i, [NSThread currentThread]);
            });
        }
            break;
        case 3: {
            XZHAsyncWithQOSBackgroud(^{
                NSLog(@"task %d: %@", i, [NSThread currentThread]);
            });
        }
            break;
        case 4: {
            XZHAsyncWithQOSDefault(^{
                NSLog(@"task %d: %@", i, [NSThread currentThread]);
            });
        }
            break;
    }
}

使用新连接池实例入队,不使用时设置 pool instance = nil 释放连接池

_pool = [[XZHDispatchQueuePool alloc] initWithName:@"test" queueCount:0];

for (int i = 0; i < 1000; i++)
  {
    XZHAsyncPoolWithQOSUserInteractive(_pool, ^{
      NSLog(@"%@", [NSThread currentThread]);
    });
    
    XZHAsyncPoolWithQOSUserInitiated(_pool, ^{
      NSLog(@"%@", [NSThread currentThread]);
    });
  }
  
_pool = nil;

并发队列可能导致线程数量增加

dispatch_get_global_queue()

dispatch_queue_create(label, concurrent)

结论

应避免随意使用并发队列。

串行队列相同的可能产生

  • 1、循环创建串行队列
  • 2、频繁创建和销毁重型对象(AVPlayer、AVPlayerLayer...)

控制线程并发

  • 1、使用池机制控制线程的最大并发数
  • 2、因为在移动终端应用中的大多数CPU任务并不消耗太多时间。
  • 3、因此不需要太多的线程
  • 4、但是过多的线程会导致CPU切换和资源竞争,从而降低性能。
  • 5、避免频繁创建和销毁线程,并控制并发线程的数量,既可以满足并发CPU的需求,又不会因为过多的线程导致性能损失

作者

xiongzenghui, [email protected]

许可证

XZHGCDDispatcher 在 MIT 许可证下可用。更多信息请参阅 LICENSE 文件。