Perché Illustrator viene ridotto alla velocità del 2% quando è in background?


8

Eseguo regolarmente uno script .jsx in Adobe Illustrator che salva un mucchio 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'app principale, l'esecuzione dello script su 5 file richiede più di 5 minuti .

  • Secondo Activity Monitor , Illustrator utilizza circa il 75% della CPU quando in primo piano ma è limitato a meno del 2% quando è in background .

  • Secondo Activity Monitor, App Nap non viene utilizzato .

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

Mi piacerebbe essere in grado di svolgere altre attività in attesa di Illustrator. Allo stato attuale, sono obbligato a tenere Illustrator in primo piano.

Alcune cose che ho provato : lo sapevo

sudo sysctl debug.lowpri_throttle_enabled=0

ho lavorato per accelerare i backup di Time Machine, quindi ho pensato che potesse essere d'aiuto in questo caso. Non ha avuto effetto .

Ho anche provato a disabilitare App Nap:

defaults write NSGlobalDomain NSAppSleepDisabled -bool YES

Non ha avuto effetto .

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

Risposte:


6

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

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

La performance di Illustrator è terribile, è lenta e faticosa, ma le operazioni più basilari. È legato a un solo thread CPU che è ridicolo ormai in un'era di CPU multi core e multi thread ed è stato così per molti anni. Non è in grado di gestire attività in background ed è completamente fuori parità nella funzione e nelle prestazioni con altri software Adobe come Photoshop e inDesign.

Enfasi mia

Sfortunatamente, se il codice non supporta operazioni CPU in background, non c'è nulla che tu possa fare dal punto di vista del tuo Mac per accelerare le cose. Come 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 una bassa priorità . Ciò significa che l'esecuzione si interrompe fino a quando la CPU non ha l'opportunità di eseguire altri comandi; di solito durante un'operazione di recupero IO. La gestione di questo processo si chiama "CPU Scheduling" ed è qualcosa che l'hardware gestisce per te: l'applicazione deve solo consentirlo (rinuncia al controllo).

Un malinteso comune sul multi-threading è che le cose si eseguono più velocemente. Questo non è il caso, sono solo più le cose che accadono contemporaneamente facendo un uso migliore delle risorse della CPU. È come avere un solo taxi (trasporto persone) che trasporta persone tra un aeroporto e un centro congressi rispetto a quattro che fanno la spola. Stanno andando tutti alla stessa velocità, è proprio ora che ti stai muovendo di più.

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


1
Puoi spiegare brevemente perché un'applicazione non multi-thread sarebbe più lenta in background? La mia immaginazione propone: ci sono N thread in esecuzione contemporaneamente e il Mac utilizza automaticamente l'85% delle sue risorse sul thread "principale" rivolto all'utente e il 15% è suddiviso per tutti gli altri thread. Non ne so nulla, lo sto solo inventando.
Andrew Swift,

1
In generale, le app a thread singolo vengono "messe in pausa" in background e "eseguite" in primo piano. Per mantenere in vita un'app mentre è in background, "sonderà" momentaneamente la CPU e chiamerà alcune funzioni per fare le cose (ad esempio il salvataggio dei file). Non si tratta di "allocare CPU" di per sé. Dalla lettura dei forum, le persone con Mac Pro a 8 e 16 core vedono solo un singolo core utilizzato quando eseguono l'IA, il che significa che semplicemente non sta sfruttando tutte le risorse.
Allan,

1
Se desideri aggiornare la tua risposta con questa descrizione, sarei felice di sceglierla come corretta.
Andrew Swift,

1
@Allan Wow! Non avrei mai immaginato che Adobe Illustrator non supporti il ​​multi-threading! A me sembra un candidato probabile per il multi-threading. Inoltre, Microsoft ha impiegato molto tempo a supportare il multi-threading con Excel (un altro candidato ovvio) e anche adesso la sua implementazione non è molto buona. Senza dubbio col passare del tempo sempre più app lo supporteranno.
Monomeeth

1
@Monomeeth - Sono d'accordo. Non potevo credere che l'IA fosse così indietro rispetto alla curva degli sviluppatori. Una cosa che ho letto nel forum è che gli utenti si sono lamentati del fatto che CC avrebbe sostanzialmente permesso ad Adobe di incassare le entrate e non di riparare il prodotto. Con Apple che passa alle proprie CPU e uccide il supporto per le app a 32 bit, Adobe potrebbe essere costretto a sistemare le cose.
Allan,

0

Questa risposta è di Mordy Golding , Product Manager per Adobe Illustrator (2001-2004), a Quora :

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

Prendi un semplice esempio: prendi un singolo livello con un singolo rettangolo. Duplica quel livello 100 volte. Anche se è visibile solo il livello superiore, Illustrator disegna ciascun rettangolo dal livello più basso in alto. Illustrator non può disegnare il livello 50 fino a quando non sono stati eseguiti i precedenti 49. Questo è diverso da Photoshop che riguarda solo i pixel alla fine visibili.

Estendere ulteriormente il concetto. Supponi di avere 4 core. Potresti prendere un file di Photoshop e dividerlo in una griglia di 4 aree e dire a ciascun core di disegnare 1 area, tutte contemporaneamente. Questo perché un pixel in una griglia non ha alcun impatto sui pixel in un'altra area della griglia. Poiché è possibile dividere una foto in più aree indipendenti, è possibile assegnare più core per eseguire il rendering di ciascuna area contemporaneamente.

Tuttavia, in Illustrator, ogni oggetto viene disegnato nell'ordine in cui appare nell'ordine di sovrapposizione. Quindi, se divido un'immagine in una griglia di quattro, devo comunque costruire tutti gli oggetti d'arte per oggetto, indipendentemente dalla griglia in cui si trovano. Ciò significa che tutti e 4 i core dovrebbero comunque attendere fino a quando tutti gli oggetti non 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 immediatamente a lavorare. Ma purtroppo, questo non è possibile per accelerare attività lineari come disegnare / rendere l'arte.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.