Подтвердить что ты не робот

Значение по умолчанию maxConcurrentOperationCount для NSOperationQueue

Как указано в заголовке, каково значение по умолчанию для maxConcurrentOperationCount для NSOperationQueue?

Установлено ли значение 1?

4b9b3361

Ответ 1

Из documentation,

Максимальное количество одновременных операций, явно установленных на приемник с использованием метода setMaxConcurrentOperationCount:. Если значение отсутствует был явно установлен, этот метод возвращает NSOperationQueueDefaultMaxConcurrentOperationCount по умолчанию.

Итак, это NSOperationQueueDefaultMaxConcurrentOperationCount. Если он установлен, он выберет соответствующее значение, основанное на количестве доступных процессоров и других соответствующих факторах.

Вот как он определен:

enum {
  NSOperationQueueDefaultMaxConcurrentOperationCount = -1
};

NSOperationQueueDefaultMaxConcurrentOperationCount:по умолчанию максимальное количество операций определяется динамически Объект NSOperationQueue, основанный на текущих условиях системы.

Ответ 2

В одном из моих приложений я добавляю около 35 тыс. Экземпляров NSOperation к NSOperationQueue одновременно. Если я установлю maxConcurrentOperationCount на 64, я получу примерно 20-кратную производительность по сравнению со значением по умолчанию. Загрузка ЦП возрастает с ~ 120% до 400%, что, по-видимому, указывает на то, что значение по умолчанию настолько высоко, что ЦП в основном занят работой над очередью операций.

Вывод: если у вас много недолговечных NSOperation, возможно, стоит поиграть с maxConcurrentOperationCount.