Perché Illustrator è ridotto al 2% della velocità quando è in background?

8

Eseguo regolarmente uno script .jsx in Adobe Illustrator che salva un gruppo di file in un formato particolare.

  • mentre Illustrator è l'app attiva, l'esecuzione dello script su 5 file richiede 23 secondi .

  • Quando Illustrator non è l'applicazione principale, eseguire lo script su 5 file richiede più di 5 minuti .

  • In base a Monitoraggio attività , Illustrator utilizza circa 75% della CPU quando è in primo piano ma viene limitato a meno di 2% quando in background .

  • Secondo Activity Monitor, App Nap non è in uso .

Perché sta succedendo questo e c'è un modo per cambiarlo?

Mi piacerebbe essere in grado di svolgere altre attività mentre aspetto Illustrator. Così com'è, sono obbligato a mantenere Illustrator in primo piano.

Alcune cose che ho provato : lo sapevo

sudo sysctl debug.lowpri_throttle_enabled=0

ha lavorato per accelerare i backup di Time Machine, quindi penso che potrebbe essere d'aiuto in questo caso. Non ha avuto alcun effetto .

Ho anche provato a disattivare App Nap:

defaults write NSGlobalDomain NSAppSleepDisabled -bool YES

Non ha avuto alcun effetto .

Ho provato TinkerTool , ma credo che sia solo una GUI per modificare l'impostazione lowpri_throttle_enabled . Non ha avuto alcun effetto .

    
posta Andrew Swift 10.04.2018 - 14:46
fonte

2 risposte

6

Questo sembra essere un problema di Adobe; in particolare, il codice base per AI non è multi-thread.

Sono stato in grado di trovare una discussione nei forum di Adobe che risolve il problema esatto - Crea Illustrator multi-threaded sulla CPU

Illustrator performance is awful, its slow and lumbering at all but the most basic operations. It is bound to only a single cpu thread which is ridiculous now in an age of multi core and multi thread CPU's and it has been this way for many years. It cannot handle background tasks and is completely out of parity in function and performance with other Adobe software such as Photoshop and inDesign.

Enfasi per l'enfasi

Sfortunatamente, se il codice non supporta le operazioni CPU in background, non c'è niente che puoi fare dal punto di vista del tuo Mac per accelerare le cose. Dato che tutti gli utenti del forum accettano (a malincuore), l'unica soluzione è aspettare un aggiornamento da Adobe.

Perché è così

In generale, le applicazioni in background sono "in pausa" - tecnicamente, hanno la priorità bassa . Ciò significa che l'esecuzione si interrompe finché la CPU non ha l'opportunità di eseguire altri comandi; di solito durante un'operazione di recupero dell'IO. La gestione di questo processo è denominata "Pianificazione della CPU" ed è qualcosa che l'hardware gestisce per te: l'applicazione deve solo consentirla (abbandona il controllo).

Un falso concetto comune di multi-threading è che le cose si eseguano più velocemente. Questo non è il caso, è solo più cose che accadono simultaneamente facendo un uso migliore delle risorse della CPU. È come avere un solo taxi (trasportatore di persone) che fa la spola tra un aeroporto e un centro conferenze contro quattro che fanno la spola. Stanno andando tutti alla stessa velocità, è solo ora che ti stai spostando di più.

L'applicazione che è "multi-thread capace" consente all'hardware di gestire e pianificare il tempo della CPU, e dato che c'è più CPU che può essere allocata, i lavori in background ottengono più risorse per portare a termine il lavoro.

    
risposta data 19.04.2018 - 19:55
fonte
0

Questa risposta è tratta da Mordy Golding , Product Manager per Adobe Illustrator (2001-2004), all'indirizzo Quora :

La grafica vettoriale ha i suoi vantaggi e svantaggi. Questo, purtroppo, è uno dei lati negativi. Questo perché la grafica vettoriale è disegnata in un ordine di impilamento lineare.

Fai un semplice esempio: prendi un singolo livello con un singolo rettangolo. Duplica quel livello 100 volte. Anche se è visibile solo il livello superiore, l'illustratore disegna ciascun rettangolo dal livello più basso verso l'alto. Illustrator non può disegnare il livello 50 fino a quando non si eseguono i 49 precedenti. Diversamente da Photoshop, questo riguarda solo quali pixel sono in definitiva visibili.

Estendere ulteriormente il concetto. Supponi di avere 4 core. Puoi prendere un file di Photoshop e dividerlo in una griglia di 4 aree e dire a ogni core di disegnare 1 area - tutto allo stesso tempo. Questo perché un pixel in una griglia non ha alcun impatto sui pixel in un'altra area della griglia. Poiché puoi dividere una foto in più aree indipendenti, puoi assegnare più core per rendere ogni area simultaneamente.

Tuttavia, in Illustrator, ciascun oggetto viene disegnato nell'ordine in cui appare nell'ordine di sovrapposizione. Quindi se divido un'immagine in una griglia di quattro, devo ancora costruire tutti gli oggetti art per oggetto, indipendentemente dalla griglia in cui si trova. Significato di tutti i 4 core dovrebbe ancora aspettare fino a quando tutti gli oggetti sono stati disegnati prima del rendering.

Ciò significa che solo alcuni tipi di funzioni possono supportare la funzionalità multi-core in Illustrator. Ad esempio, se si stampa un file di grandi dimensioni, Illustrator consegnerà lo spooling di stampa a un altro core e tornerà al documento per continuare a lavorare immediatamente. Purtroppo, questo non è possibile per velocizzare attività lineari come disegno / rendering arte.

    
risposta data 13.09.2018 - 10:27
fonte

Leggi altre domande sui tag