Pourquoi Illustrator est-il limité à une vitesse de 2% lorsqu'il est en arrière-plan?

8

Je lance régulièrement un script .jsx dans Adobe Illustrator qui enregistre un tas de fichiers dans un format particulier.

  • tandis qu'Illustrator est l'application active, l'exécution du script sur 5 fichiers prend 23 secondes .

  • Lorsque Illustrator n'est pas l'application principale, l'exécution du script sur 5 fichiers prend plus de 5 minutes .

  • Selon Activity Monitor , Illustrator utilise environ 75% du processeur au premier plan mais est limité à moins de 2% en arrière-plan .

  • Selon Activity Monitor, App Nap n'est pas utilisé .

Pourquoi cela se produit-il et existe-t-il un moyen de le changer?

J'aimerais pouvoir effectuer d'autres tâches en attendant Illustrator. En l'état, je suis obligé de garder Illustrator au premier plan.

J'ai essayé certaines choses : je savais que

sudo sysctl debug.lowpri_throttle_enabled=0

travaillé pour accélérer les sauvegardes Time Machine, donc je pensais que cela pourrait aider dans ce cas. Cela n'a eu aucun effet .

J'ai également essayé de désactiver App Nap:

defaults write NSGlobalDomain NSAppSleepDisabled -bool YES

Cela n'a eu aucun effet .

J'ai essayé TinkerTool , mais je crois que c'est juste une interface graphique pour changer le paramètre lowpri_throttle_enabled . Cela n'a eu aucun effet .

Andrew Swift
la source

Réponses:

6

Cela semble être un problème Adobe; en particulier, la base de code pour l'IA n'est pas multithread.

J'ai pu trouver une discussion dans les forums d'Adobe qui traite de votre problème exact - Rendre Illustrator multi-thread sur CPU

Les performances d'Illustrator sont horribles, elles sont lentes et lourdes, sauf les opérations les plus élémentaires. Il n'est lié qu'à un seul thread cpu, ce qui est ridicule à l'ère des processeurs multicœurs et multi-threads et il en est ainsi depuis de nombreuses années. Il ne peut pas gérer les tâches d'arrière-plan et est complètement hors de parité dans la fonction et les performances avec d'autres logiciels Adobe tels que Photoshop et inDesign.

Emphase mine

Malheureusement, si le code ne peut pas prendre en charge les opérations en arrière-plan du processeur, vous ne pouvez rien faire du point de vue de votre Mac pour accélérer les choses. Comme tous les utilisateurs du forum l'acceptent (à contrecœur), la seule solution est d'attendre une mise à jour d'Adobe.

Pourquoi en est-il ainsi

De manière générale, les applications en arrière-plan sont "suspendues" - techniquement, elles ont une faible priorité . Cela signifie que l'exécution s'arrête jusqu'à ce que le processeur ait la possibilité d'exécuter d'autres commandes; généralement lors d'une opération de récupération d'E / S. La gestion de ce processus s'appelle "CPU Scheduling" et est quelque chose que le matériel gère pour vous - l'application doit juste l'autoriser (abandonner le contrôle).

Une idée fausse commune du multi-threading est que les choses s'exécutent plus rapidement. Ce n'est pas le cas, c'est juste plus de choses se produisent simultanément en faisant un meilleur usage des ressources CPU. C'est comme si un seul taxi (transporteur de personnes) faisait la navette entre un aéroport et un centre de conférence contre quatre pour faire la navette. Ils vont tous à la même vitesse, c'est juste maintenant que vous bougez plus.

L'application étant "multi-thread capable" permet au matériel de gérer et de planifier le temps CPU et étant donné qu'il y a plus de CPU qui peut être alloué, les travaux en arrière-plan obtiennent plus de ressources pour faire le travail.

Allan
la source
1
Pouvez-vous expliquer brièvement pourquoi une application non multithread serait plus lente en arrière-plan? Mon imagination propose: il y a N threads en cours d'exécution en même temps, et le Mac utilise automatiquement 85% de ses ressources sur le thread utilisateur "principal" et 15% est réparti pour tous les autres threads. Je ne sais rien à ce sujet, je suis juste en train de l'inventer.
Andrew Swift
1
De manière générale, les applications à thread unique sont "suspendues" en arrière-plan et "exécutées" au premier plan. Pour garder une application vivante en arrière-plan, elle "interrogera" momentanément le CPU et appellera certaines fonctions pour faire des choses (l'enregistrement de votre fichier, par exemple). Il ne s'agit pas "d'allouer le CPU" en soi. En lisant les forums, les personnes possédant des Mac Pro 8 et 16 cœurs ne voient qu'un seul cœur utilisé lors de l'exécution de l'IA, ce qui signifie qu'il ne profite tout simplement pas de toutes les ressources.
Allan
1
Si vous souhaitez mettre à jour votre réponse avec cette description, je serais heureux de la choisir comme correcte.
Andrew Swift
1
@Allan Wow! Je n'aurais jamais deviné qu'Adobe Illustrator ne prend pas en charge le multi-threading! Il me semble que c'est un candidat probable pour le multi-threading. Là encore, il a fallu longtemps à Microsoft pour prendre en charge le multithread avec Excel (un autre candidat évident), et même maintenant, sa mise en œuvre n'est pas très bonne. Sans aucun doute, au fil du temps, de plus en plus d'applications le prendront en charge.
Monomeeth
1
@Monomeeth - Je suis d'accord. Je ne pouvais pas croire que l'IA était si loin derrière la courbe de développement. Une chose que j'ai lue dans le forum était que les utilisateurs déploraient que CC permettrait essentiellement à Adobe de percevoir des revenus et non de réparer le produit. Avec Apple migrant vers leurs propres processeurs et supprimant la prise en charge des applications 32 bits, Adobe pourrait être contraint de résoudre les problèmes.
Allan
0

Cette réponse est de Mordy Golding , chef de produit pour Adobe Illustrator (2001-2004), chez Quora :

Les graphiques vectoriels ont leurs avantages et leurs inconvénients. Malheureusement, c'est l'un des inconvénients. En effet, les graphiques vectoriels sont dessinés dans un ordre d'empilement linéaire.

Prenons un exemple simple - prenez un seul calque avec un seul rectangle. Dupliquez ce calque 100 fois. Même si seul le calque supérieur est visible, l'illustrateur dessine chaque rectangle du calque le plus bas vers le haut. Illustrator ne peut pas dessiner le calque 50 tant que les 49 précédents ne sont pas terminés. Cela ne ressemble pas à Photoshop qui se préoccupe uniquement des pixels qui sont finalement visibles.

Extension du concept. Disons que vous aviez 4 cœurs. Vous pouvez prendre un fichier Photoshop et le diviser en une grille de 4 zones et dire à chaque noyau de dessiner 1 zone - tout en même temps. C'est parce qu'un pixel dans une grille n'a aucun impact sur les pixels dans une autre zone de grille. Comme vous pouvez diviser une photo en plusieurs zones indépendantes, vous pouvez attribuer plusieurs cœurs pour rendre chaque zone simultanément.

Cependant, dans l'illustrateur, chaque objet est dessiné dans l'ordre dans lequel il apparaît dans l'ordre d'empilement. Donc, si je divise une image en une grille de quatre, je dois encore construire tous les objets d'art par objet, quelle que soit la grille dans laquelle elle se trouve.

Cela signifie que seuls certains types de fonctions peuvent prendre en charge la fonctionnalité multicœur dans Illustrator. Par exemple, si vous imprimez un gros fichier, l'illustrateur remettra la file d'attente d'impression à un autre noyau et vous renverra à votre document pour continuer à travailler immédiatement. Mais malheureusement, cela n'est pas possible pour accélérer des tâches linéaires comme le dessin / rendu d'art.

Andrew Swift
la source