美文网首页iOS取经之路
iOS 100个下载任务,最多同时开5个线程。

iOS 100个下载任务,最多同时开5个线程。

作者: 上帝很忙 | 来源:发表于2018-09-05 15:42 被阅读297次

    1.思路:利用GCD信号量:dispatch_semaphore_signal

        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        dispatch_semaphore_t semaphore = dispatch_semaphore_create(5);
        
        for (int i = 0 ; i<100; i++) {
            dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
            dispatch_async(queue, ^{
                NSLog(@"任务%d开始",i);
                sleep(i);
                NSLog(@"任务%d结束",i);
                
                dispatch_semaphore_signal(semaphore);
            });
        }
    

    log:

    创建5个任务.png 结束一个任务才开始新的任务.png

    2.模拟下载任务
    下载20集连续剧

        //20集电视剧资源,项目中替换为下载链接  www.xxxxxx.com/movie/xxxx_1;www.xxxxxx.com/movie/xxxx_2
        NSArray*moviesArray = [NSArray arrayWithObjects:
                               @"第1集", @"第2集",@"第3集",@"第4集",@"第5集",
                               @"第6集",@"第7集",@"第8集",@"第9集",@"第10集",
                               @"第11集", @"第12集",@"第13集",@"第14集",@"第15集",
                               @"第16集",@"第17集",@"第18集",@"第19集",@"第20集",
                               nil];
        
        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        dispatch_semaphore_t semaphore = dispatch_semaphore_create(5);
        
        for (int i = 0 ; i<moviesArray.count; i++) {
            dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
            dispatch_async(queue, ^{
                //www.xxxxxx.com/movie/xxxx_i
                //模拟下载任务
                NSLog(@"%@开始下载",moviesArray[i]);
                sleep(10+i*2);//假设下载一集需要10+i*2秒
                NSLog(@"%@下载完成",moviesArray[i]);
                
                dispatch_semaphore_signal(semaphore);
            });
        }
    

    log:


    电视剧下载.gif

    3.GCD信号量概念


    GCD信号量概念.png

    上图节选自https://www.jianshu.com/p/324c2fded696 信号量一节

    相关文章

      网友评论

        本文标题:iOS 100个下载任务,最多同时开5个线程。

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