Мне нужно скачать изображения через потоки фона, но ограничить количество потоков. Максимальный номер потока должен быть 5, и в каждом потоке должна быть только одна последовательная очередь. Для клиент-сервера, использующего ракетную библиотеку сокетов. Главная проблема в том, что мне не нужны NSOperation-плюсы, такие как отмены операций. Ищете простое решение, но может нашел только что-то вроде этого:Ограничение количества потоков
self.limitingSema = dispatch_semaphore_create(kOperationLimit);
dispatch_queue_t concurentQueue = dispatch_queue_create("limiting queue", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(concurentQueue, ^{
dispatch_semaphore_wait(self.limitingSema, DISPATCH_TIME_FOREVER);
/* upload image here */
dispatch_semaphore_signal(self.limitingSema);
});
Но тогда, как ограничить количество потоков и ждать новых операций запуска, пока они не готовы в очереди?
Хорошо ли контролировать количество очередей?
NSArray *queues = @[dispatch_queue_create("com.YOU.binaryQueue_1", DISPATCH_QUEUE_SERIAL),
dispatch_queue_create("com.YOU.binaryQueue_2", DISPATCH_QUEUE_SERIAL),
dispatch_queue_create("com.YOU.binaryQueue_3", DISPATCH_QUEUE_SERIAL)
];
NSUInteger randQueue = arc4random() % [queues count];
dispatch_async([queues objectAtIndex:randQueue], ^{
NSLog(@"Do something");
});
randQueue = arc4random() % [queues count];
dispatch_async([queues objectAtIndex:randQueue], ^{
NSLog(@"Do something else");
});