Dlaczego program Illustrator jest dławiony do 2% prędkości, gdy jest w tle?

8

Regularnie uruchamiam skrypt .jsx w programie Adobe Illustrator, który zapisuje kilka plików w określonym formacie.

  • podczas gdy Illustrator jest aktywną aplikacją, uruchomienie skryptu na 5 plikach zajmuje 23 sekundy .

  • Gdy program Illustrator nie jest najważniejszą aplikacją, uruchomienie skryptu na 5 plikach zajmuje więcej niż 5 minut .

  • Według Activity Monitora Illustrator zużywa około 75% procesora na pierwszym planie, ale w tle jest dławiony do mniej niż 2% .

  • Według Activity Monitor App Nap nie jest używany .

Dlaczego tak się dzieje i czy można to zmienić?

Chciałbym móc wykonywać inne zadania, czekając na program Illustrator. Na obecnym etapie jestem zobowiązany do utrzymywania programu Illustrator na pierwszym planie.

Niektóre rzeczy próbowałem : wiedziałem o tym

sudo sysctl debug.lowpri_throttle_enabled=0

pracowałem nad przyspieszeniem tworzenia kopii zapasowych Time Machine, więc pomyślałem, że może to pomóc w tym przypadku. Nie miało to wpływu .

Próbowałem również wyłączyć App Nap:

defaults write NSGlobalDomain NSAppSleepDisabled -bool YES

Nie miało to wpływu .

Próbowałem TinkerTool , ale wierzę, że to tylko GUI, aby zmienić ustawienie lowpri_throttle_enabled . Nie miało to wpływu .

Andrew Swift
źródło

Odpowiedzi:

6

To wydaje się być problemem Adobe; w szczególności podstawa kodu dla AI nie jest wielowątkowa.

Udało mi się znaleźć dyskusję na forach Adobe, która dotyczy twojego dokładnego problemu - uczyń program Illustrator wielowątkowy na procesorze

Wydajność programu Illustrator jest okropna, jego powolność i ociężałość w ogóle, z wyjątkiem najbardziej podstawowych operacji. Jest związany tylko z jednym wątkiem procesora, co jest niedorzeczne w dobie wielordzeniowych i wielowątkowych procesorów i tak było od wielu lat. Nie radzi sobie z zadaniami w tle i jest całkowicie nierówny pod względem funkcji i wydajności z innym oprogramowaniem Adobe, takim jak Photoshop i inDesign.

Podkreśl moje

Niestety, jeśli kod nie obsługuje operacji procesora w tle, nic nie możesz zrobić z perspektywy komputera Mac, aby przyspieszyć. Jak wszyscy użytkownicy forum (niechętnie) akceptują, jedynym rozwiązaniem jest oczekiwanie na aktualizację od Adobe.

Dlaczego tak jest

Ogólnie rzecz biorąc, aplikacje w tle są „wstrzymane” - technicznie mają niski priorytet . Oznacza to, że wykonywanie zatrzymuje się, dopóki CPU nie będzie w stanie wykonać więcej poleceń; zwykle podczas operacji pobierania IO. Zarządzanie tym procesem nazywa się „Planowaniem CPU” i jest to coś, co obsługuje sprzęt - aplikacja musi na to pozwolić (zrzec się kontroli).

Powszechnym błędnym przekonaniem o wielowątkowości jest to, że rzeczy działają szybciej. Tak nie jest, po prostu więcej rzeczy dzieje się jednocześnie, lepiej wykorzystując zasoby procesora. To tak, jakby jedna taksówka (przewoźnik osób) przewoziła ludzi między lotniskiem a centrum konferencyjnym w porównaniu do czterech osób przewożących autobus. Wszyscy jadą z tą samą prędkością, właśnie teraz poruszasz się bardziej.

Aplikacja jest „wielowątkowa”, pozwala sprzętowi zarządzać i planować czas procesora, a ponieważ jest więcej procesorów, które można przydzielić, zadania w tle otrzymują więcej zasobów do wykonania zadania.

Allan
źródło
1
Czy potrafisz krótko wyjaśnić, dlaczego aplikacja nie obsługująca wielu wątków działałaby wolniej w tle? Moja wyobraźnia proponuje: jednocześnie działa N wątków, a Mac automatycznie zużywa 85% swoich zasobów w głównym wątku skierowanym do użytkownika, a 15% jest dzielone na wszystkie pozostałe wątki. Nic o tym nie wiem, po prostu to zmyślam.
Andrew Swift,
1
Ogólnie rzecz biorąc, aplikacje jednowątkowe są „wstrzymywane” w tle i „uruchamiane” na pierwszym planie. Aby aplikacja działała w tle, na chwilę „sonduje” procesor i wywołuje niektóre funkcje (np. Zapisywanie plików). Nie chodzi o „alokację procesora” jako takiego. Po przeczytaniu forów ludzie z 8 i 16 rdzeniowymi komputerami Mac Pro widzą tylko jeden rdzeń używany podczas działania AI, co oznacza, że ​​po prostu nie wykorzystuje pełnych zasobów.
Allan,
1
Jeśli chcesz zaktualizować swoją odpowiedź tym opisem, chętnie wybiorę ją jako poprawną.
Andrew Swift,
1
@Allan Wow! Nigdy bym nie zgadł, że Adobe Illustrator nie obsługuje wielowątkowości! Wydaje mi się, że jest to prawdopodobnie kandydat na wielowątkowość. Z drugiej strony Microsoft długo potrzebował obsługi wielowątkowości w programie Excel (kolejny oczywisty kandydat) i nawet teraz jego implementacja nie jest bardzo dobra. Z biegiem czasu bez wątpienia będzie go obsługiwać coraz więcej aplikacji.
Monomeeth
1
@Monomeeth - zgadzam się. Nie mogłem uwierzyć, że sztuczna inteligencja była tak daleko w tyle za krzywą twórczą. Jedną rzeczą, którą przeczytałem na forum, było to, że użytkownicy lamentowali, że CC zasadniczo pozwoli Adobe pobierać przychody i nie naprawi produktu. Gdy Apple przenosi się na własne procesory i obsługuje zabijanie aplikacji 32-bitowych, Adobe może być zmuszony to naprawić.
Allan
0

Ta odpowiedź pochodzi od Mordy Golding , Product Managera dla Adobe Illustrator (2001-2004), w Quora :

Grafika wektorowa ma swoje zalety i wady. Jest to niestety jedna z wad. Dzieje się tak, ponieważ grafika wektorowa jest rysowana w liniowej kolejności.

Weźmy jeden prosty przykład - weź pojedynczą warstwę z jednym prostokątem. Duplikuj tę warstwę 100 razy. Mimo że widoczna jest tylko górna warstwa, program Illustrator rysuje każdy prostokąt od najniższej warstwy do góry. Program Illustrator nie może narysować warstwy 50, dopóki poprzednie 49 nie zostaną wykonane. W przeciwieństwie do Photoshopa, który martwi się, które piksele są ostatecznie widoczne.

Dalsze rozszerzenie koncepcji. Powiedz, że miałeś 4 rdzenie. Możesz wziąć plik Photoshopa i podzielić go na siatkę 4 obszarów i powiedzieć każdemu rdzeniu, aby narysował 1 obszar - wszystkie jednocześnie. Jest tak, ponieważ piksel w jednej siatce nie ma żadnego wpływu na piksele w innym obszarze siatki. Ponieważ możesz podzielić zdjęcie na wiele niezależnych obszarów, możesz przypisać wiele rdzeni do renderowania każdego obszaru jednocześnie.

Jednak w programie Illustrator każdy obiekt jest rysowany w kolejności, w jakiej pojawia się w stosie. Więc jeśli podzielę obraz na czteroosobową siatkę, nadal będę musiał budować cały obiekt artystyczny według obiektu, bez względu na to, w jakiej on jest sieci. Oznacza to, że wszystkie 4 rdzenie będą musiały poczekać, aż wszystkie obiekty zostaną narysowane przed renderowaniem.

Oznacza to, że tylko niektóre funkcje mogą obsługiwać funkcje wielordzeniowe w programie Illustrator. Na przykład, jeśli wydrukujesz duży plik, program Illustrator przekaże buforowanie wydruku do innego rdzenia i wróci z powrotem do dokumentu, aby natychmiast kontynuować pracę. Niestety nie jest to możliwe, aby przyspieszyć zadania liniowe, takie jak rysowanie / renderowanie sztuki.

Andrew Swift
źródło