为什么Illustrator在后台时会被限制为2%的速度?


8

我经常在Adobe Illustrator中运行.jsx脚本,该脚本以特定格式保存一堆文件。

  • 当Illustrator是活动应用程序时,对5个文件运行脚本需要23秒

  • 如果Illustrator不是最重要的应用程序,则对5个文件运行脚本将花费5分钟以上的时间

  • 根据Activity Monitor的研究,Illustrator 在前台使用的CPU约占75%,而在后台使用的CPU则控制在2%以下。

  • 根据活动监视器,未使用App Nap

为什么会发生这种情况,有办法改变吗?

我希望能够在等待Illustrator的同时执行其他任务。就目前而言,我不得不将Illustrator放在前台。

我尝试过的一些事情:我知道

sudo sysctl debug.lowpri_throttle_enabled=0

努力加快Time Machine备份的速度,所以我在这种情况下可能会有所帮助。没有效果

我也尝试禁用App Nap:

defaults write NSGlobalDomain NSAppSleepDisabled -bool YES

没有效果

我尝试过TinkerTool,但我相信它只是更改lowpri_throttle_enabled设置的GUI 。没有效果

Answers:


6

这似乎是Adobe的问题;具体来说,用于AI的代码库不是多线程的。

我可以在Adobe论坛中找到解决您确切问题的讨论- 使Illustrator在CPU上多线程

Illustrator的性能太差了,除了最基本的操作之外,它的速度慢而且笨拙。它仅绑定到单个cpu线程,在多核和多线程CPU的时代,这是荒谬的,并且这种方式已经存在很多年了。它无法处理后台任务,并且在功能和性能上与其他Adobe软件(例如Photoshop和inDesign)完全不相称。

重点矿

不幸的是,如果代码不能支持后台CPU操作,那么从Mac的角度来看,您无能为力。当论坛中的所有用户(逐渐地)接受时,唯一的解决方案是等待Adobe进行更新。

为什么会这样

一般来说,后台的应用程序是“暂停”的-从技术上讲,它们的优先级较低。这意味着直到CPU有机会执行更多命令之前,执行才会停止。通常在IO提取操作期间。管理此过程称为“ CPU调度”,这是硬件为您处理的事情-应用程序只需要允许它(放弃控制)。

对多线程的一个常见误解是事情执行得更快。事实并非如此,这是同时发生的更多事情,它们可以更好地利用CPU资源。这就像在机场和会议中心之间穿梭于一辆出租车(载人车),而不是四辆穿梭于人们之间。他们都以相同的速度前进,只是现在您移动得更多。

具有“多线程功能”的应用程序允许硬件管理和调度CPU时间,并且由于可以分配更多的CPU,因此后台作业将获得更多资源来完成作业。


1
您能否简要解释一下为什么非多线程应用程序在后台运行会更慢?我的想象力提出:一次运行N个线程,Mac自动在面向用户的“主”线程上使用其85%的资源,而将15%的资源分配给所有其他线程。我对此一无所知,我只是在弥补。
安德鲁·斯威夫特

1
一般来说,单线程应用在后台“暂停”,在前台“运行”。为了使应用程序在后台运行,它会立即“轮询” CPU并调用一些函数来执行操作(例如,保存文件)。它本身与“分配CPU”无关。通过阅读论坛,拥有8和16核心Mac Pro的人们在运行AI时只会看到使用了一个核心,这意味着它根本没有利用全部资源。
艾伦

1
如果您想使用此描述来更新您的答案,我们很乐意选择正确的答案。
安德鲁·斯威夫特

1
@艾伦哇!我永远都不会想到Adobe Illustrator不支持多线程!在我看来,它似乎是多线程的候选对象。再说一次,微软花了很长时间才支持Excel多线程(另一个明显的候选者),即使现在它的实现也不是很好。毫无疑问,随着时间的流逝,越来越多的应用程序将支持它。
Monomeeth

1
@Monomeeth-我同意。我无法相信AI远远落后于开发曲线。我在论坛上读到的一件事是用户哀叹CC实质上将允许Adobe收集收入而不修复产品。随着苹果转向自己的CPU并取消对32位应用程序的支持,Adobe可能会被迫修复问题。
艾伦

0

这个答案来自Quora的 Adobe Illustrator产品经理(2001-2004)Mordy Golding

矢量图形各有优缺点。不幸的是,这是缺点之一。这是因为矢量图形是以线性堆叠顺序绘制的。

举一个简单的例子-用一个矩形的单个图层。复制该层100次。即使只有顶层可见,illustrator也会从最底层到顶部绘制每个矩形。在完成之前的49之前,Illustrator无法绘制图层50。这不同于photoshop,后者只关心最终可见的像素。

进一步扩展概念。假设您有4个核心。您可以将一个Photoshop文件分割成4个区域的网格,并告诉每个核心绘制1个区域-所有这些都同时进行。那是因为一个网格中的像素对另一网格区域中的像素没有任何影响。由于可以将照片分为多个独立区域,因此可以分配多个核心以同时渲染每个区域。

但是,在Illustrator中,每个对象都是按照其在堆叠顺序中出现的顺序绘制的。因此,如果将图像分成四个网格,则无论对象位于哪个网格中,我仍然必须逐个对象构建所有艺术品。这意味着所有4个核心仍必须等到绘制完所有对象之后再进行渲染。

这意味着在Illustrator中只有某些功能可以支持多核功能。例如,如果您打印一个大文件,则Illustrator会将假脱机打印移交给另一个核心,然后将您返回到文档中以立即继续工作。但是可悲的是,这不可能加快诸如绘画/渲染图稿之类的线性任务。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.