Por que o Illustrator é acelerado para 2% da velocidade quando está em segundo plano?

8

Eu regularmente executo um script .jsx no Adobe Illustrator que salva vários arquivos em um formato específico.

  • enquanto o Illustrator é o aplicativo ativo, a execução do script em 5 arquivos leva 23 segundos .

  • Quando o Illustrator não é o aplicativo principal, a execução do script em 5 arquivos leva mais de 5 minutos .

  • De acordo com o Activity Monitor , o Illustrator está usando cerca de 75% da CPU quando em primeiro plano, mas é acelerado para menos de 2% quando em segundo plano .

  • De acordo com o Activity Monitor, o App Nap não está sendo usado .

Por que isso está acontecendo e existe uma maneira de mudar isso?

Gostaria de poder executar outras tarefas enquanto aguarda o Illustrator. Tal como está, sou obrigado a manter o Illustrator em primeiro plano.

Algumas coisas que eu tentei : eu sabia que

sudo sysctl debug.lowpri_throttle_enabled=0

trabalhei para acelerar os backups do Time Machine, por isso pensei que poderia ajudar nesse caso. Não teve efeito .

Também tentei desativar o App Nap:

defaults write NSGlobalDomain NSAppSleepDisabled -bool YES

Não teve efeito .

Eu tentei o TinkerTool , mas acredito que é apenas uma GUI para alterar a configuração lowpri_throttle_enabled . Não teve efeito .

Andrew Swift
fonte

Respostas:

6

Este parece ser um problema da Adobe; especificamente, a base de código para AI não é multiencadeada.

Consegui encontrar uma discussão nos fóruns da Adobe que abordasse seu problema exato - Torne o Illustrator multiencadeado na CPU

O desempenho do Illustrator é péssimo, lento e pesado, exceto as operações mais básicas. Ele está vinculado a apenas um único thread da CPU, que é ridículo agora em uma era de CPUs com vários núcleos e com vários threads, e tem sido assim por muitos anos. Ele não pode lidar com tarefas em segundo plano e está completamente fora de paridade em função e desempenho com outros softwares da Adobe, como Photoshop e inDesign.

Mina de ênfase

Infelizmente, se o código não puder suportar operações em segundo plano da CPU, não há nada que você possa fazer da perspectiva do seu Mac para acelerar as coisas. Como todos os usuários do fórum aceitam (de má vontade), a única solução é aguardar uma atualização da Adobe.

Por que isso é tão

De um modo geral, os aplicativos em segundo plano são "pausados" - tecnicamente, eles recebem baixa prioridade . O que isso significa é que a execução é interrompida até que a CPU tenha a oportunidade de executar mais alguns comandos; geralmente durante uma operação de busca de E / S. O gerenciamento desse processo é chamado de "CPU Scheduling" e é algo que o hardware lida com você - o aplicativo apenas precisa permitir (renunciar ao controle).

Um equívoco comum do multi-threading é que as coisas são executadas mais rapidamente. Não é esse o caso, apenas mais coisas acontecem simultaneamente, fazendo melhor uso dos recursos da CPU. É como ter um único táxi (transportadora de pessoas) transportando pessoas entre um aeroporto e um centro de conferências versus quatro fazendo a transferência. Todos estão na mesma velocidade, agora você está se movendo mais.

O aplicativo "com capacidade para vários threads" permite que o hardware gerencie e agende o tempo da CPU e, como há mais CPU que pode ser alocada, os trabalhos em segundo plano obtêm mais recursos para realizar o trabalho.

Allan
fonte
11
Você pode explicar brevemente por que um aplicativo não multiencadeado seria mais lento em segundo plano? Minha imaginação propõe: existem N threads em execução ao mesmo tempo, e o Mac usa automaticamente 85% de seus recursos no thread "principal" voltado para o usuário e 15% é dividido em todos os outros threads. Não sei nada sobre isso, só estou inventando.
Andrew Swift
11
De um modo geral, os aplicativos de thread único são "pausados" em segundo plano e "executados" em primeiro plano. Para manter um aplicativo ativo enquanto em segundo plano, ele "pesquisa" momentaneamente a CPU e chama algumas funções para fazer as coisas (como salvar arquivos, por exemplo). Não se trata de "alocar CPU" por si só. Ao ler os fóruns, pessoas com Mac Pros de 8 e 16 núcleos estão vendo apenas um único núcleo sendo utilizado ao executar a IA, o que significa que simplesmente não está tirando proveito de todos os recursos.
Allan
11
Se você deseja atualizar sua resposta com esta descrição, será um prazer selecioná-la como correta.
Andrew Swift
11
@Allan Wow! Eu nunca imaginaria que o Adobe Illustrator não suporta multi-threading! Para mim, parece um candidato provável para multi-threading. Por outro lado, demorou muito tempo para a Microsoft oferecer suporte a multiencadeamento com o Excel (outro candidato óbvio), e mesmo agora sua implementação não é muito boa. Sem dúvida, com o passar do tempo, mais e mais aplicativos o apoiarão.
Monomeeth
11
@ Monomeeth - eu concordo. Eu não podia acreditar que a IA estava tão atrás da curva de desenvolvimento. Uma coisa que li no fórum foram os usuários lamentando que o CC permitisse essencialmente à Adobe coletar receitas e não consertar o produto. Com a Apple mudando para suas próprias CPUs e eliminando o suporte a aplicativos de 32 bits, a Adobe pode ser forçada a consertar as coisas.
Allan
0

Esta resposta é de Mordy Golding , gerente de produto do Adobe Illustrator (2001-2004), no Quora :

Os gráficos vetoriais têm suas vantagens e desvantagens. Infelizmente, essa é uma das desvantagens. Isso ocorre porque os gráficos vetoriais são desenhados em uma ordem de empilhamento linear.

Tome um exemplo simples - pegue uma única camada com um único retângulo. Duplique essa camada 100 vezes. Mesmo que apenas a camada superior esteja visível, o illustrator desenha cada retângulo da camada inferior da parte superior para a parte superior. O Illustrator não pode desenhar a camada 50 até que os 49 anteriores sejam concluídos. Isso é diferente do photoshop, que se preocupa apenas com quais pixels são visíveis.

Estendendo o conceito ainda mais. Digamos que você tenha 4 núcleos. Você pode pegar um arquivo do photoshop e dividi-lo em uma grade de 4 áreas e dizer a cada núcleo para desenhar 1 área - tudo ao mesmo tempo. Isso ocorre porque um pixel em uma grade não afeta em pixels em outra área da grade. Como você pode dividir uma foto em várias áreas independentes, pode atribuir vários núcleos para renderizar cada área simultaneamente.

No entanto, no ilustrador, cada objeto é desenhado na ordem em que aparece na ordem de empilhamento. Portanto, se eu dividir uma imagem em uma grade de quatro, ainda tenho que construir todos os objetos de arte por objeto, independentemente da grade em que está. Ou seja, todos os quatro núcleos ainda terão que esperar até que todos os objetos sejam desenhados antes da renderização.

O que isso significa é que apenas alguns tipos de funções podem suportar a funcionalidade de vários núcleos no Illustrator. Por exemplo, se você imprimir um arquivo grande, o illustrator entregará o spool de impressão para outro núcleo e retornará ao seu documento para continuar trabalhando imediatamente. Infelizmente, isso não é possível para acelerar tarefas lineares como desenhar / renderizar arte.

Andrew Swift
fonte