Я реализовал пул потоков, используя NSOperationQueue
. В котором я установил maxConcurrentOperationCount
на 25
. то есть одновременно выполняется 25 потоков.
Я загружаю куски на сервер, используя этот файл NSOperationQueue
. Таким образом, куски выделяются первым 25 потокам. После того, как NSOperationQueue
заполнится, я хочу приостановить часть чтения фрагментов, а затем всякий раз, когда потоки из очереди завершатся, возобновить часть фрагментации, чтобы выделить новые потоки для NSOperationQueue
, чтобы заменить поток, который завершился.
Мой код:
NSOperationQueue *operationQueue = [NSOperationQueue new];
operationQueue.maxConcurrentOperationCount=5;
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(upload:) object:f_objChunkDetails->FileStream];
NSUInteger oprCnt=operationQueue.operationCount;
if(oprCnt >= 5) {
// wait till queue has a free slot
} else {
[operationQueue addOperation:operation];
}
Итак, как пауза и возобновление используются в NSOperationQueue
? Как реализовать ManualResetEvent
в Objective-C?
NSConditionLock
. 20.03.2014NSConditionLock
можно использовать в качестве семафора-счетчика. Как иdispatch_semaphore_t
. 24.03.2014