я направляю ряд действий, подобный этому:Ответный когда несколько dispatch_async() закончили
for (int x = 0; x < 1000; x++)
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul),
^{
//Do stuff
});
Как только все они закончили выполнение Я хочу вызвать другой метод [self someMethod];
или послать другой последний блок , не имеет значения, какой.
Как я могу это достичь?
Это неясно мне, как предсказать наихудшее количество потоков, которые могли бы создать НОД. Легко ли заканчивать одним потоком для каждой отправки, даже если они не зависят друг от друга каким-либо образом? –
Ключ заключается в том, работают ли какие-либо блоки на любом (блокировка, диск или сеть io и т. Д.). Для чисто вычислительной работы процессора GCD хорошо справится. После блокировки вызовов он не имеет достаточной информации для надлежащего дросселирования. –
@Catfish_Man Даже для чисто вычислительной работы, если вы отправляете 100 длинных блоков в асинхронную очередь, вы, скорее всего, получите 100 потоков. GCD не может дросселировать отправку блоков на асинхронные очереди, потому что GCD не знает, какие зависимости могут существовать между ними. Даже API-интерфейс зависимостей в NSOperationQueue можно считать консультативным; он не может знать, что операция A блоков B и, следовательно, B затухает от выполнения, потому что A работает, является недопустимым состоянием. – bbum