¿Por qué se limita la velocidad de Illustrator al 2% cuando está en segundo plano?

8

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

  • mientras que Illustrator es la aplicación activa, ejecutar el script en 5 archivos tarda 23 segundos .

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

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

  • Según Activity Monitor, la aplicación Nap no se está utilizando .

¿Por qué sucede esto y hay alguna manera 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 : lo sabía

sudo sysctl debug.lowpri_throttle_enabled=0

trabajó para acelerar las copias de seguridad de Time Machine, así que pensé que podría ayudar en este caso. No tuvo ningún efecto .

También intenté deshabilitar App Nap:

defaults write NSGlobalDomain NSAppSleepDisabled -bool YES

No tuvo ningún efecto .

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

    
pregunta Andrew Swift 10.04.2018 - 14:46

2 respuestas

6

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

Pude encontrar una discusión en los foros de Adobe que aborda su problema exacto - Haga que Illustrator tenga varios hilos en la CPU

  

El rendimiento de Illustrator es horrible, lento y pesado, pero las operaciones más básicas. Está limitado a un solo subproceso cpu, que ahora es ridículo en una era de CPU de múltiples núcleos y subprocesos, y así ha sido 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.

Emphasis mine

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

Por qué esto es así

En general, las aplicaciones en segundo plano están "pausadas"; 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; por lo general durante una operación de recuperación de IO. La gestión de este proceso se denomina "Programación de la CPU" y es algo que el hardware maneja por usted: la aplicación solo tiene que permitirlo (renunciar al control).

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

La aplicación tiene "capacidad para múltiples subprocesos" y 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.

    
respondido por el Allan 19.04.2018 - 19:55
0

Esta respuesta es de Mordy Golding , Product Manager para Adobe Illustrator (2001-2004), en Quora :

Los gráficos vectoriales tienen sus ventajas y desventajas. Esto, lamentablemente, es una de las desventajas. 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 la capa superior es visible, el ilustrador dibuja cada rectángulo desde la capa más inferior hasta la parte superior. Illustrator no puede dibujar la capa 50 hasta que se hayan completado los 49 anteriores. Esto es diferente al photoshop que solo se ocupa de qué píxeles son visibles en última instancia.

Extendiendo el concepto aún más. Digamos que tienes 4 núcleos. Podría 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 de otra área de cuadrícula. Ya que puede dividir una foto en múltiples áreas independientes, puede asignar múltiples núcleos para renderizar 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 compilar todo el 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 todos los objetos se dibujaran antes de renderizar.

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

    
respondido por el Andrew Swift 13.09.2018 - 10:27

Lea otras preguntas en las etiquetas