Почему Illustrator регулируется до 2% скорости, когда он находится в фоновом режиме?

8

Я регулярно запускаю сценарий .jsx в Adobe Illustrator, который сохраняет несколько файлов в определенном формате.

  • в то время как Illustrator является активным приложением, запуск сценария для 5 файлов занимает 23 секунды .

  • Когда Illustrator не является основным приложением, запуск сценария для 5 файлов занимает более 5 минут .

  • Согласно Activity Monitor , Illustrator использует около 75% ЦП, когда находится на переднем плане, но регулируется до уровня менее 2%, когда на заднем плане .

  • Согласно Activity Monitor, App Nap не используется .

Почему это происходит, и есть ли способ изменить это?

Я хотел бы иметь возможность выполнять другие задачи в ожидании Illustrator. В его нынешнем виде я обязан держать Illustrator на переднем плане.

Некоторые вещи, которые я пробовал : я знал, что

sudo sysctl debug.lowpri_throttle_enabled=0

работал для ускорения резервного копирования Time Machine, так что я думаю, что это может помочь в этом случае. Это не имело никакого эффекта .

Я также попытался отключить App Nap:

defaults write NSGlobalDomain NSAppSleepDisabled -bool YES

Это не имело никакого эффекта .

Я попытался TinkerTool , но я считаю, что это просто графический интерфейс для изменения настройки lowpri_throttle_enabled . Это не имело никакого эффекта .

Эндрю Свифт
источник

Ответы:

6

Похоже, это проблема Adobe; в частности, кодовая база для ИИ не многопоточная.

Мне удалось найти обсуждение на форумах Adobe, посвященное вашей конкретной проблеме - сделать Illustrator многопоточным на процессоре

Производительность иллюстратора ужасна, она медленная и неуклюжая, за исключением самых основных операций. Он связан только с одним потоком процессора, что сейчас смешно в эпоху многоядерных и многопоточных процессоров, и так было уже много лет. Он не может справиться с фоновыми задачами и совершенно не соответствует функциональности и производительности других программ Adobe, таких как Photoshop и inDesign.

Акцент мой

К сожалению, если код не поддерживает фоновые операции ЦП, вы ничего не можете сделать с точки зрения вашего Mac, чтобы ускорить процесс. Поскольку пользователи форума все (неохотно) принимают, единственное решение - дождаться обновления от Adobe.

Почему это так

Вообще говоря, приложения в фоновом режиме «паузы» - технически, они имеют низкий приоритет . Это означает, что выполнение останавливается до тех пор, пока у процессора не появится возможность выполнить еще несколько команд; обычно во время операции ввода-вывода. Управление этим процессом называется «Планирование ЦП» и является тем, что аппаратное обеспечение обрабатывает для вас - приложение просто должно разрешить его (отказаться от управления).

Распространенным заблуждением о многопоточности является то, что все выполняется быстрее. Это не так, просто одновременно происходит больше вещей, что позволяет лучше использовать ресурсы процессора. Это похоже на то, как если бы между одним аэропортом и конференц-центром перевозилось одно такси (перевозчик людей), а четверо - на автобусе. Все они движутся с одинаковой скоростью, просто сейчас вы двигаетесь больше.

Приложение, «поддерживающее многопоточность», позволяет аппаратному обеспечению управлять и планировать время ЦП, а поскольку больше ЦП может быть выделено, фоновые задания получают больше ресурсов для выполнения работы.

Аллан
источник
1
Не могли бы вы вкратце объяснить, почему не многопоточное приложение будет работать медленнее в фоновом режиме? Мое воображение предполагает: одновременно работают N потоков, и Mac автоматически использует 85% своих ресурсов в «основном» пользовательском потоке, а 15% распределяется для всех остальных потоков. Я ничего не знаю об этом, я просто придумываю это.
Эндрю Свифт
1
Вообще говоря, однопоточные приложения «паузы» в фоновом режиме и «запуск» на переднем плане. Чтобы приложение работало в фоновом режиме, оно на мгновение «опрашивает» ЦП и вызывает некоторые функции для выполнения действий (например, сохранение файла). Речь идет не о «выделении процессора» как таковом. Читая форумы, люди с 8- и 16-ядерным Mac Pro видят, что при запуске ИИ используется только одно ядро, что означает, что он просто не использует все ресурсы.
Аллан
1
Если вы хотите обновить свой ответ этим описанием, я буду рад выбрать его как правильный.
Эндрю Свифт
1
@ Алан Вау! Я бы никогда не подумал, что Adobe Illustrator не поддерживает многопоточность! Мне кажется, это вероятный кандидат для многопоточности. С другой стороны, Microsoft потребовалось много времени для поддержки многопоточности с Excel (еще один очевидный кандидат), и даже сейчас ее реализация не очень хороша. Без сомнения, со временем все больше и больше приложений будут поддерживать его.
Мономет
1
@ Мономет - я согласен. Я не мог поверить, что ИИ был так далеко позади кривой разработки. Одна вещь, которую я прочитал на форуме, - это жалобы пользователей на то, что CC позволит Adobe собирать доходы, а не исправлять продукт. Поскольку Apple переходит на свои собственные процессоры и убивает поддержку 32-битных приложений, Adobe может быть вынуждена что-то исправить.
Аллан
0

Этот ответ от Морди Голдинга , менеджера по продукту Adobe Illustrator (2001-2004), в Quora :

Векторная графика имеет свои преимущества и недостатки. К сожалению, это один из недостатков. Это потому, что векторная графика рисуется в линейном порядке.

Возьмем один простой пример - один слой с одним прямоугольником. Дублируйте этот слой 100 раз. Даже если виден только верхний слой, иллюстратор рисует каждый прямоугольник от самого нижнего слоя до самого верха. Illustrator не может рисовать слой 50, пока не будут выполнены предыдущие 49. Это не похоже на фотошоп, который касается только того, какие пиксели в конечном итоге видны.

Расширяя концепцию дальше. Скажем, у вас было 4 ядра. Вы можете взять файл фотошопа и разделить его на сетку из 4 областей, и попросить каждое ядро ​​нарисовать 1 область - все одновременно. Это связано с тем, что пиксель в одной сетке никак не влияет на пиксели в другой области сетки. Поскольку вы можете разделить фотографию на несколько независимых областей, вы можете назначить несколько ядер для визуализации каждой области одновременно.

Однако в Illustrator каждый объект рисуется в том порядке, в котором он отображается в порядке наложения. Поэтому, если я разделю изображение на сетку из четырех, мне все равно придется строить весь арт-объект по объекту, независимо от того, в какой сетке он находится. Это означает, что всем 4 ядрам все равно придется ждать, пока все объекты будут нарисованы, прежде чем выполнять рендеринг.

Это означает, что только некоторые виды функций могут поддерживать многоядерные функции в Illustrator. Например, если вы распечатываете большой файл, иллюстратор передаст спулинг печати другому ядру и вернет вас обратно в документ, чтобы немедленно продолжить работу. Но, к сожалению, это невозможно для ускорения линейных задач, таких как рисование / рендеринг.

Эндрю Свифт
источник