Полагаю, для этого нужен отдельный ответ, а не комментарий:
Интересно, что означает число ядер теперь, когда яблоко принесло более асимметричную обработку с помощью слияния A10?У нас 2,2 ядра или 4 ядра?Apple пренебрегает, чтобы activeProcessorCount плавал, чтобы учесть его фрактальную природу.Обратите внимание, что это было так даже до слияния, потому что тогда у них, вероятно, было тепловое дросселирование.Им нужно либо исправить чрезмерный коммит nsoperationqueue, либо придумать эквивалент с плавающей запятой для activeProcessorCount и отказаться от activeProcessorCount в его текущей форме, которая теряет свою полезность перед лицом недавних улучшений hw
Так что чем быстрее закон Мура попадает взабвение или получает новую блестящую константу, тем более бессмысленным становится подсчет ядра.Если вы не пишете что-то вроде Geek Bench 42, многоядерное издание партитуры.
Жить в конце 2016 года, чтобы решить основную проблему, с которой вы столкнулись, а не взламывать с помощью максимального числа одновременных операций. Я предполагаю, что вы настроили QoS для NSOperationQueue на .Background?
Meдумает, что это более чистый способ решения вашей проблемы с современным ios sdk, а затем подсчитывает их ядра, используя километры веревки, любезно предоставленные albertamg
Также обратите внимание на NSProcessInfoThermalStateDidChangeNotification (macos) и NSProcessInfo.lowPowerModeEnabled (ios)Я предполагаю, что альтернативой наблюдения NSProcessInfoThermalStateDidChangeNotification является KVo для нового значения activeProcessorCount)
, если вы начнете учитывать эти новые реалии, корректировки магических констант для умножения числа ядер станут интересными очень быстро ... и гниют какновое аппаратное обеспечение выходит из cupertino.
И установить его в текущем зоопарке Apple hw будет почти так же просто, как правильно настроить работу на уровне сокетов: doabно только по нескольким в Купетино, когда тень iSteve нависает над плечом, проверяя качество; -)