iOS控制并發(fā)數(shù)

并發(fā)是我們在多線程操作和資源限制時經(jīng)常碰到的業(yè)務場景,解決方案也有很多,這里記錄兩種。
1.使用NSOperationQueue來控制

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];//創(chuàng)建隊列
    queue.maxConcurrentOperationCount = 3;//設置并發(fā)數(shù)
    for (NSInteger i = 0; i < 100; i ++) {
        // 使用 NSBlockOperation 創(chuàng)建操作
        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);//創(chuàng)建信號量
    for (NSInteger i = 0; i < 100; i ++) {
        dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);//等待信號,直到信號量大于0時才可以操作,同時將信號量-1,小于0時阻塞不往下執(zhí)行
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            [NSThread sleepForTimeInterval:2];// 模擬耗時操作
            NSLog(@"i=%ld",i);
            dispatch_semaphore_signal(sema);//信號量通知,即讓信號量+1
        });
    }

信號量這個詞我們并不陌生,學校里操作系統(tǒng)中有生產(chǎn)者消費者模型,通過信號量進行資源競爭,完成程序調度。
3.也可以自己來判斷,維護兩個數(shù)組,一個存儲所有任務A,一個存儲待執(zhí)行任務B,每次任務執(zhí)行完的回調里檢測B是否小于并發(fā)數(shù),小于時從A中添加到并發(fā)限制。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,656評論 1 32
  • 前言 Pthread,NSThread,GCD和NSOperation是iOS中多線程的四種實現(xiàn)方案。 一.進程和...
    小李龍彪閱讀 717評論 1 4
  • 1.設計模式是什么? 你知道哪些設計模式,并簡要敘述? 設計模式是一種編碼經(jīng)驗,就是用比較成熟的邏輯去處理某一種類...
    司馬DE晴空閱讀 1,466評論 0 7
  • 為避免多線程同時爭奪一塊資源,將加鎖、資源爭奪的邏輯交給服務器端處理,減少移動端的壓力 并發(fā)(concurrenc...
    一代驕馬閱讀 255評論 0 0
  • 快捷鍵是:Alt + Ctrl + O
    追夢小樂閱讀 680評論 0 0

友情鏈接更多精彩內容