美文网首页
iOS控制并发数

iOS控制并发数

作者: 迷了jiang | 来源:发表于2019-11-22 10:01 被阅读0次

并发是我们在多线程操作和资源限制时经常碰到的业务场景,解决方案也有很多,这里记录两种。
1.使用NSOperationQueue来控制

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];//创建队列
    queue.maxConcurrentOperationCount = 3;//设置并发数
    for (NSInteger i = 0; i < 100; i ++) {
        // 使用 NSBlockOperation 创建操作
        NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
            [NSThread sleepForTimeInterval:2]; // 模拟耗时操作
            NSLog(@"blockOperatio---i:%ld+%@",(long)i, [NSThread currentThread]); // 打印当前线程
        }];
        [queue addOperation:operation];//加入队列
    }

NSOperation是基于GCD的封装,更加的面向对象,使用起来更加便洁。
2.使用GCD的信号量来控制

    dispatch_semaphore_t sema = dispatch_semaphore_create(5);//创建信号量
    for (NSInteger i = 0; i < 100; i ++) {
        dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);//等待信号,直到信号量大于0时才可以操作,同时将信号量-1,小于0时阻塞不往下执行
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            [NSThread sleepForTimeInterval:2];// 模拟耗时操作
            NSLog(@"i=%ld",i);
            dispatch_semaphore_signal(sema);//信号量通知,即让信号量+1
        });
    }

信号量这个词我们并不陌生,学校里操作系统中有生产者消费者模型,通过信号量进行资源竞争,完成程序调度。
3.也可以自己来判断,维护两个数组,一个存储所有任务A,一个存储待执行任务B,每次任务执行完的回调里检测B是否小于并发数,小于时从A中添加到并发限制。

相关文章

  • iOS 控制并发数

    }

  • iOS控制并发数

    并发是我们在多线程操作和资源限制时经常碰到的业务场景,解决方案也有很多,这里记录两种。1.使用NSOperatio...

  • iOS多线程控制最大并发数

    iOS多线程最常用是GCD和NSOperation。一般简单的异步任务直接使用GCD,需要控制最大并发数和控制状态...

  • 信号量Semaphore

    异步并发控制线程数 dispatch_semaphore_create 设置最大并发数 dispatch_sema...

  • iOS多线程篇-NSOperation方法使用

    NSOperation-方法使用 一、并发数 简介(1)该属性控制队列是串行执行还是并发执行(2)如果最大并发数等...

  • iOS实录16:GCD小结之控制最大并发数

    导语:在GCD的使用中,需要考虑控制最大并发数 和 线程同步这两个问题,本文主要介绍GCD中如何控制最大并发数 。...

  • iOS实录:GCD使用小结(二)

    2017-07-29iOS开发 导语:在GCD的使用中,需要考虑控制最大并发数 和 线程同步这两个问题,本文主要介...

  • Go语言小技巧(1)-控制并发数

    Go语言小技巧(1)-控制并发数 需求 虽然goroutine很廉价,但是有时候还是希望控制goroutine并发...

  • iOS GCD信号量的使用

    iOS信号量主要用于GCD对线程安全的控制其中有三个主要的函数 使用场景 主要是控制线程并发数 比如 上面的代码只...

  • 控制GCD并发线程数

    Grand Central Dispatch(GCD) 是 Apple 开发的一个多核编程的较新的解决方法。它主要...

网友评论

      本文标题:iOS控制并发数

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