¿Por qué se acelera Illustrator a una velocidad del 2% cuando está en segundo plano?

8

Regularmente ejecuto un script .jsx en Adobe Illustrator que guarda un montón de archivos en un formato particular.

  • Si bien Illustrator es la aplicación activa, ejecutar el script en 5 archivos toma 23 segundos .

  • Cuando Illustrator no es la aplicación principal, ejecutar el script en 5 archivos lleva más de 5 minutos .

  • Según Activity Monitor , Illustrator usa alrededor del 75% de la CPU cuando está en primer plano, pero se limita a menos del 2% cuando está en segundo plano .

  • Según Activity Monitor, App Nap no se está utilizando .

¿Por qué sucede esto? ¿Hay alguna forma de cambiarlo?

Me gustaría poder realizar otras tareas mientras espero a Illustrator. Tal como está, estoy obligado a mantener a Illustrator en primer plano.

Algunas cosas que he intentado : sabía que

sudo sysctl debug.lowpri_throttle_enabled=0

trabajé para acelerar las copias de seguridad de Time Machine, por lo que pensé que podría ayudar en este caso. No tuvo efecto .

También intenté deshabilitar App Nap:

defaults write NSGlobalDomain NSAppSleepDisabled -bool YES

No tuvo efecto .

Intenté TinkerTool , pero creo que es solo una GUI para cambiar la configuración lowpri_throttle_enabled . No tuvo efecto .

Andrew Swift
fuente

Respuestas:

6

Esto parece ser un problema de Adobe; específicamente, la base de código para AI no es multihilo.

Pude encontrar una discusión en los foros de Adobe que aborda su problema exacto: haga que Illustrator sea multiproceso en la CPU

El rendimiento de Illustrator es horrible, es lento y pesado, excepto las operaciones más básicas. Está limitado a un solo subproceso de CPU que es ridículo ahora en una era de CPU de múltiples núcleos y múltiples subprocesos y ha sido así durante muchos años. No puede manejar tareas en segundo plano y está completamente fuera de paridad en función y rendimiento con otro software de Adobe como Photoshop e inDesign.

El énfasis es mío

Desafortunadamente, si el código no puede soportar operaciones de CPU en segundo plano, no hay nada que pueda hacer desde la perspectiva de su Mac para acelerar las cosas. Como todos los usuarios del foro aceptan (a regañadientes), la única solución es esperar una actualización de Adobe.

¿Por qué esto es así?

En términos generales, las aplicaciones en segundo plano están "en pausa": técnicamente, se les da baja prioridad . Lo que esto significa es que la ejecución se detiene hasta que la CPU tenga la oportunidad de ejecutar algunos comandos más; generalmente durante una operación de recuperación de IO. La gestión de este proceso se denomina "Programación de CPU" y es algo que el hardware maneja por usted: la aplicación solo tiene que permitirlo (ceder el control).

Un error común de subprocesamiento múltiple es que las cosas se ejecutan más rápido. Este no es el caso, es solo que más cosas suceden simultáneamente haciendo un mejor uso de los recursos de la CPU. Es como tener un solo taxi (transportista de personas) que transporta personas entre un aeropuerto y un centro de conferencias frente a cuatro que realizan el traslado. Todos van a la misma velocidad, justo ahora te estás moviendo más.

La aplicación es "capaz de subprocesos múltiples" permite que el hardware administre y programe el tiempo de CPU y, dado que hay más CPU que se puede asignar, los trabajos en segundo plano obtienen más recursos para realizar el trabajo.

Alano
fuente
1
¿Puede explicar brevemente por qué una aplicación sin subprocesos múltiples sería más lenta en segundo plano? Mi imaginación propone: hay N subprocesos ejecutándose al mismo tiempo, y la Mac usa automáticamente el 85% de sus recursos en el subproceso "principal" orientado al usuario y el 15% se divide para todos los otros subprocesos. No sé nada de esto, solo lo estoy inventando.
Andrew Swift el
1
En términos generales, las aplicaciones de subproceso único se "pausan" en segundo plano y se "ejecutan" en primer plano. Para mantener viva una aplicación en segundo plano, momentáneamente "sondeará" la CPU y llamará a algunas funciones para que hagan cosas (por ejemplo, guardar archivos). No se trata de "asignar CPU" per se. Al leer los foros, las personas con Mac y 8 y 16 núcleos profesionales solo ven que se utiliza un solo núcleo al ejecutar AI, lo que significa que simplemente no se está aprovechando de todos los recursos.
Allan
1
Si desea actualizar su respuesta con esta descripción, me complacerá elegirla como correcta.
Andrew Swift
1
@Allan Wow! ¡Nunca habría adivinado que Adobe Illustrator no admite subprocesos múltiples! Para mí, parece un candidato probable para subprocesos múltiples. Por otra parte, a Microsoft le llevó mucho tiempo admitir subprocesos múltiples con Excel (otro candidato obvio), e incluso ahora su implementación no es muy buena. Sin duda, a medida que pasa el tiempo, más y más aplicaciones lo admitirán.
Monomeeth
1
@Monomeeth - Estoy de acuerdo. No podía creer que la IA estuviera tan lejos de la curva de desarrollo. Una cosa que leí en el foro fue que los usuarios se lamentaban de que CC esencialmente permitiría a Adobe recaudar ingresos y no arreglar el producto. Con Apple moviéndose a sus propias CPU y eliminando el soporte para aplicaciones de 32 bits, Adobe podría verse obligado a arreglar las cosas.
Allan
0

Esta respuesta es de Mordy Golding , Gerente de Producto de Adobe Illustrator (2001-2004), en Quora :

Los gráficos vectoriales tienen sus ventajas y desventajas. Esto, lamentablemente, es uno de los inconvenientes. Esto se debe a que los gráficos vectoriales se dibujan en un orden de apilamiento lineal.

Tome un ejemplo simple: tome una sola capa con un solo rectángulo. Duplica esa capa 100 veces. Aunque solo se ve la capa superior, el ilustrador dibuja cada rectángulo desde la capa más inferior hasta la superior. Illustrator no puede dibujar la capa 50 hasta que las 49 anteriores estén listas. Esto es diferente al photoshop que solo se refiere a qué píxeles son finalmente visibles.

Extendiendo el concepto aún más. Digamos que tienes 4 núcleos. Puede tomar un archivo de Photoshop y dividirlo en una cuadrícula de 4 áreas y decirle a cada núcleo que dibuje 1 área, todo al mismo tiempo. Esto se debe a que un píxel en una cuadrícula no tiene ningún impacto en los píxeles en otra área de la cuadrícula. Como puede dividir una foto en múltiples áreas independientes, puede asignar múltiples núcleos para representar cada área simultáneamente.

Sin embargo, en Illustrator, cada objeto se dibuja en el orden en que aparece en el orden de apilamiento. Entonces, si divido una imagen en una cuadrícula de cuatro, todavía tengo que construir todo el objeto de arte por objeto, sin importar en qué cuadrícula se encuentre. Lo que significa que los 4 núcleos aún tendrían que esperar hasta que se dibujaran todos los objetos antes de renderizar.

Lo que esto significa es que solo algunos tipos de funciones pueden admitir la funcionalidad multinúcleo en Illustrator. Por ejemplo, si imprime un archivo grande, el ilustrador entregará la cola de impresión a otro núcleo y lo regresará a su documento para continuar trabajando inmediatamente. Pero lamentablemente, esto no es posible para acelerar tareas lineales como dibujar / renderizar arte.

Andrew Swift
fuente