Создаю киоск-приложение для Mac и тестирую производительность и загрузку ЦП. Монитор активности показывает в общей сложности примерно от 90 до 150% использования ЦП для постоянно работающих процессов киоска.
Моя первая путаница заключается в том, что загрузка ЦП может превышать 100%, но я понимаю, что это связано с количеством ядер.
Итак, мой вопрос: приемлемо ли 150% общего использования ЦП для Mac на базе киоска с постоянно работающими приложениями 24/7? Или это слишком высоко?
addendum> приложение постоянно обрабатывает видео, единственным «взаимодействием» является видеопоток, поступающий с веб-камеры.
В идеале ваше киоск-приложение должно использовать 0% ЦП, когда оно не используется активно . Маловероятно, что вы добьетесь этого без значительных усилий, но даже цель использования в 5–10% — это хорошо.
При постоянной загрузке ЦП на 150 % приложение, скорее всего, будет считаться неисправным обозревателями Apple Mac App Store и многими клиентами.
Если ваше киоск-приложение анимирует или показывает движущийся контент, например рекламу или фильмы, делайте все возможное с помощью AVFoundation /QuickTime. Обычно это переносит обработку на графический процессор и позволяет центральному процессору бездействовать.
Для других анимаций обязательно используйте CoreGraphics и CoreAnimation. Они значительно улучшат энергетическую отдачу вашего приложения.
Изучите руководство Apple по энергоэффективности для приложений Mac . Во введении излагаются намерения Apple:
Ваша обязанность как разработчика
Даже небольшая неэффективность приложений сказывается на всей системе, существенно влияя на срок службы батареи, производительность, скорость отклика и температуру. Как разработчик приложения, вы обязаны убедиться, что ваше приложение работает максимально эффективно. Используйте рекомендуемые API, чтобы система могла принимать разумные решения о том, как лучше всего управлять вашим приложением и используемыми им ресурсами. По возможности избегайте ненужных обновлений пользовательского интерфейса и ввода/вывода. Энергоемкие операции должны находиться под контролем пользователя. Если пользователь инициирует, например, большой рендеринг iMovie, пакетное задание Automator, преобразование Compressor или компиляцию Xcode, пользователь не должен удивляться, если это действие потребляет энергию. Стремитесь сделать ваше приложение абсолютно бездействующим, когда оно не отвечает на ввод данных пользователем.
Используйте инструменты разработчика для профилирования энергопотребления вашего приложения и спросите в Stack Overflow , как снизить нагрузку на ЦП. Удачи!
ask away on Stack Overflow for ways to reduce CPU load
это было бы не по теме без конкретного примера кода, например «Слишком широкий».150% всего ЦП, конечно, было бы не только совершенно неприемлемо, но и физически невозможно.
Я знаю, что большинство спортсменов, кажется, думают, что они могут выложиться как минимум на 110% каждый раз, когда у них берут интервью, но никто не указал им на простые факты, я думаю ;-)
Монитор активности показывает использование ЦП отдельными приложениями на ядро [включая виртуальные ядра], поэтому 150% на самом деле (для i7 с 4 ядрами + гиперпоточность) 150 / 8 = 18,75% от общей мощности машины.
Общее количество системы + пользователя под отдельными цифрами является более точным представлением общего использования машины, и быстрый подсчет цифр дает вам приблизительное представление о том, что это на самом деле истинное положение вещей.
Взяв это в качестве примера, видимые проценты в сумме составляют около 120, но показатель «Система + пользователь» составляет всего 5,3%.
У меня 24 виртуальных ядра [2 x 6-ядерных процессора + гиперпоточность], поэтому 120/24 = 5 [достаточно близко к учитывать процессы дальше по списку]
При 18,75% от общей мощности машины я не вижу смысла в усилиях по оптимизации, если только другой процесс не нуждается в какой-либо значительной части оставшихся возможностей.
Если у вас нет проблем, не оптимизируйте преждевременно, вот мой совет. Аппаратное обеспечение будет работать на 100 % (или 800 % одного отдельного потока в случае вашего оборудования) без каких-либо побочных эффектов, и если у вас нет блокирующих эффектов — ваши анимации и функции киоска могут даже не ухудшиться, когда ЦП полностью загружен 24/7. .
Если есть возможность снизить нагрузку на ЦП, сделайте это, но i7 имеет 4 физических ядра и рассчитывает загрузку ЦП против 8 виртуальных ядер. Ваше оборудование в идеале работает на 800%, а вы сейчас только на 150%? Похоже, что ваши спецификации для оборудования более чем излишние для ситуации с одноразовым киоском. Если вы выбрали стек технологий и довольны содержимым киоска с точки зрения анимации, способности выполнять задачу, для которой вы его «нанимаете», я бы не стал беспокоиться о какой-то навязанной извне «лучшей практике», даже если Apple рекомендует быть эффективным кодировщиком (кстати, ОТЛИЧНЫМ).
В любой системе вы можете запланировать использование не более 80%, если вы не можете оценивать, измерять, реагировать и исправлять пиковое использование. Это ориентир, и, конечно, когда вы можете добиться большего успеха, вы должны это сделать.
Я предполагаю, что у вас действительно есть инструменты удаленного доступа для отправки обновлений, и вы можете измерять загрузку ЦП с течением времени и реагировать, но интерактивность киоска кажется низкой из-за того, что «мы теряем деньги», когда система тормозит.
Любая «лучшая практика» действительно является отправной точкой для вашей оценки. Нет причин не оставлять компьютер на 100% загруженным, если основной поток не заблокирован, а система в целом изящно деградирует.
КузенКокаин