เหตุใด Illustrator จึงเร่งความเร็วเป็น 2% เมื่ออยู่ในพื้นหลัง


8

ฉันรันสคริปต์. jsx ใน Adobe Illustrator เป็นประจำซึ่งบันทึกไฟล์จำนวนมากในรูปแบบเฉพาะ

  • ในขณะที่ผู้วาดภาพประกอบเป็น app ที่ใช้งานที่ใช้สคริปต์บน5 ไฟล์จะใช้เวลา 23 วินาที

  • เมื่อ Illustrator ไม่ได้เป็นแอปพลิเคสำคัญที่สุดใช้สคริปต์ใน5 ไฟล์ใช้เวลากว่า 5 นาที

  • ตามกิจกรรมการตรวจสอบ , Illustrator ใช้รอบ ๆ75% ของ CPU เมื่ออยู่ในเบื้องหน้าแต่ผ่อนคันเร่งน้อยกว่า2% เมื่ออยู่ในพื้นหลัง

  • ตามกิจกรรมการตรวจสอบ, App Nap ไม่ได้ถูกใช้

ทำไมสิ่งนี้จึงเกิดขึ้นและมีวิธีในการเปลี่ยนแปลงหรือไม่

ฉันต้องการทำงานอื่น ๆ ระหว่างรอ Illustrator ฉันจำเป็นต้องรักษาผู้วาดภาพประกอบไว้เบื้องหน้า

บางสิ่งที่ฉันได้ลอง : ฉันรู้ว่า

sudo sysctl debug.lowpri_throttle_enabled=0

ทำงานเพื่อเร่งความเร็วการสำรองข้อมูล Time Machine ดังนั้นฉันคิดว่าอาจช่วยได้ในกรณีนี้ มันก็ไม่มีผล

ฉันยังลองปิดใช้งาน App Nap:

defaults write NSGlobalDomain NSAppSleepDisabled -bool YES

มันก็ไม่มีผล

ฉันลองTinkerToolแต่ฉันเชื่อว่ามันเป็นเพียง GUI ในการเปลี่ยนการตั้งค่าlowpri_throttle_enabled มันก็ไม่มีผล

คำตอบ:


6

สิ่งนี้ดูเหมือนจะเป็นปัญหาของ Adobe รหัสฐานสำหรับ AI ไม่ได้เป็นแบบมัลติเธรด

ฉันสามารถค้นหาการสนทนาในฟอรัม Adobe ที่จัดการปัญหาที่แน่นอนของคุณ - สร้าง Illustrator หลายเธรดบน CPU

ประสิทธิภาพของ Illustrator นั้นแย่มากมันช้าและงัดแงะ แต่เป็นการดำเนินการขั้นพื้นฐานที่สุด มันถูกผูกไว้กับเธรด cpu เพียงอันเดียวซึ่งไร้สาระตอนนี้ในยุคของมัลติคอร์และซีพียูหลายเธรดและมันก็เป็นเช่นนี้มานานหลายปี ไม่สามารถจัดการกับงานพื้นหลังและเกินความเท่าเทียมในด้านฟังก์ชั่นและประสิทธิภาพของซอฟต์แวร์ Adobe อื่น ๆ เช่น Photoshop และ inDesign

เน้นการขุด

น่าเสียดายที่หากรหัสไม่สามารถรองรับการทำงานของ CPU ในพื้นหลังได้คุณไม่สามารถทำอะไรจากมุมมองของ Mac เพื่อเร่งความเร็ว เนื่องจากผู้ใช้ในฟอรัมทั้งหมดยอมรับอย่างไม่พอใจโซลูชันเดียวคือรอการอัปเดตจาก Adobe

ทำไมเป็นเช่นนี้

โดยทั่วไปการใช้งานในพื้นหลังที่มีการ "หยุดชั่วคราว" - ในทางเทคนิคที่พวกเขาจะได้รับความสำคัญต่ำ สิ่งนี้หมายความว่าการดำเนินการจะหยุดจนกว่า CPU จะมีโอกาสดำเนินการคำสั่งเพิ่มเติม โดยปกติระหว่างการดำเนินการดึงข้อมูล IO การจัดการกระบวนการนี้เรียกว่า "การกำหนดเวลา CPU" และเป็นสิ่งที่ฮาร์ดแวร์จัดการกับคุณ - แอปพลิเคชันจะต้องอนุญาต (ปล่อยการควบคุม)

ความเข้าใจผิดที่พบบ่อยของมัลติเธรดคือสิ่งต่าง ๆ ทำงานได้เร็วขึ้น นี่ไม่ใช่กรณีมันเป็นเพียงแค่สิ่งต่าง ๆ เกิดขึ้นพร้อมกันทำให้การใช้ทรัพยากร CPU ดีขึ้น มันเหมือนกับการมีแท็กซี่คนเดียว (คนรับส่งผู้คน) รับส่งผู้คนระหว่างสนามบินและศูนย์การประชุมเมื่อเทียบกับสี่คนที่ทำเรื่องกระสวยอวกาศ พวกเขาทั้งหมดจะมีความเร็วเท่ากันตอนนี้คุณก็เคลื่อนไหวได้มากขึ้น

แอพพลิเคชั่นที่มี "ความสามารถในการทำงานแบบมัลติเธรด" ช่วยให้ฮาร์ดแวร์สามารถจัดการและกำหนดเวลา CPU ได้และเนื่องจากมี CPU ที่สามารถจัดสรรได้มากขึ้นงานพื้นหลังจะได้รับทรัพยากรมากขึ้นเพื่อให้งานเสร็จสมบูรณ์


1
คุณช่วยอธิบายสั้น ๆ ได้ไหมว่าทำไมแอพพลิเคชันที่ไม่ใช่มัลติเธรดจะทำงานช้าลงในพื้นหลัง จินตนาการของฉันเสนอ: มีเธรด N เธรดทำงานอยู่ในคราวเดียวและ Mac ใช้ทรัพยากร 85% โดยอัตโนมัติในเธรดที่หันหน้าเข้าหาผู้ใช้ "หลัก" และ 15% จะถูกแบ่งสำหรับเธรดอื่นทั้งหมด ฉันไม่รู้อะไรเลยเกี่ยวกับเรื่องนี้ฉันแค่สร้างมันขึ้นมา
Andrew Swift

1
โดยทั่วไปแล้วแอปพลิเคชันเธรดเดี่ยวจะ "หยุดชั่วคราว" ในพื้นหลังและ "เรียกใช้" ในเบื้องหน้า ในการทำให้แอพมีชีวิตอยู่ในพื้นหลังก็จะ "โพล" CPU และเรียกบางฟังก์ชั่นเพื่อทำสิ่งต่าง ๆ (เช่นการบันทึกไฟล์ของคุณ) มันไม่เกี่ยวกับ "การจัดสรร CPU" ต่อ se จากการอ่านฟอรัมผู้ที่มี Mac Pros 8 และ 16 หลักจะเห็นแกนเดียวที่ถูกใช้เมื่อเรียกใช้ AI หมายความว่ามันไม่ได้ใช้ประโยชน์จากทรัพยากรเต็มรูปแบบ
อัลลัน

1
หากคุณต้องการอัปเดตคำตอบของคุณพร้อมคำอธิบายนี้ฉันยินดีที่จะเลือกให้ถูกต้อง
Andrew Swift

1
@ อัลลันว้าว! ฉันจะไม่เคยเดาเลยว่า Adobe Illustrator ไม่รองรับการใช้เธรดแบบหลายเธรด! สำหรับฉันดูเหมือนว่าจะมีผู้สมัครหลายเธรด จากนั้นอีกครั้ง Microsoft ใช้เวลานานในการรองรับหลายเธรดด้วย Excel (ตัวเลือกอื่นที่ชัดเจน) และถึงตอนนี้การใช้งานยังไม่ดีนัก ไม่ต้องสงสัยเลยว่าเมื่อเวลาผ่านไปแอพมากขึ้นจะสนับสนุน
Monomeeth

1
@Monomeeth - ฉันเห็นด้วย ฉันไม่อยากจะเชื่อเลยว่า AI นั้นอยู่ด้านหลังโค้งของ dev สิ่งหนึ่งที่ฉันอ่านในฟอรัมคือผู้ใช้เสียใจว่า CC จะอนุญาตให้ Adobe รวบรวมรายได้และไม่แก้ไขผลิตภัณฑ์ เมื่อ Apple ย้ายไปใช้ CPU ของตัวเองและฆ่าการสนับสนุนแอพ 32 บิต Adobe อาจถูกบังคับให้แก้ไขสิ่งต่าง ๆ
อัลลัน

0

คำตอบนี้มาจากMordy Goldingผู้จัดการผลิตภัณฑ์สำหรับ Adobe Illustrator (2001-2004) ที่Quora :

กราฟิกแบบเวกเตอร์มีข้อดีและข้อเสีย น่าเศร้านี่คือหนึ่งในข้อเสีย นั่นเป็นเพราะกราฟิกแบบเวกเตอร์ถูกวาดในลำดับการสแต็ก

ยกตัวอย่างง่ายๆอย่างหนึ่ง - นำเลเยอร์เดียวพร้อมสี่เหลี่ยมผืนผ้าหนึ่งอัน ทำซ้ำเลเยอร์นั้น 100 ครั้ง แม้ว่าจะมีเพียงเลเยอร์บนสุดเท่านั้นที่สามารถมองเห็นได้ illustrator จะดึงแต่ละสี่เหลี่ยมผืนผ้าจากเลเยอร์ด้านล่างสุดไปยังด้านบน Illustrator ไม่สามารถวาดเลเยอร์ 50 ได้จนกว่า 49 อันก่อนหน้าจะเสร็จสิ้น ซึ่งแตกต่างจาก Photoshop ที่เกี่ยวข้องกับพิกเซลที่มองเห็นได้ในที่สุด

ขยายแนวคิดต่อไป สมมติว่าคุณมี 4 แกน คุณสามารถใช้ไฟล์ Photoshop และแยกเป็นตาราง 4 พื้นที่และบอกให้แต่ละคอร์ทำการวาด 1 พื้นที่ - ทั้งหมดในเวลาเดียวกัน นั่นเป็นเพราะพิกเซลในกริดหนึ่งไม่มีผลกระทบใด ๆ ต่อพิกเซลในพื้นที่กริดอื่น เนื่องจากคุณสามารถแบ่งภาพถ่ายออกเป็นหลาย ๆ พื้นที่อิสระคุณสามารถกำหนดหลายคอร์เพื่อแสดงแต่ละพื้นที่พร้อมกัน

อย่างไรก็ตามในผู้วาดภาพประกอบแต่ละวัตถุจะถูกวาดตามลำดับที่ปรากฏในลำดับการซ้อน ดังนั้นถ้าฉันแบ่งภาพเป็นตารางสี่ฉันยังคงต้องสร้างวัตถุศิลปะทั้งหมดโดยวัตถุไม่ว่าจะเป็นเส้นตารางใดความหมายทั้ง 4 แกนยังคงต้องรอจนกว่าวัตถุทั้งหมดจะถูกวาดก่อนแสดงผล

สิ่งนี้หมายความว่ามีฟังก์ชันบางประเภทเท่านั้นที่สามารถรองรับการทำงานแบบมัลติคอร์ใน Illustrator ตัวอย่างเช่นหากคุณพิมพ์ไฟล์ขนาดใหญ่นักวาดภาพประกอบจะส่งสปูลออกไปยังแกนอื่นและส่งคุณกลับไปที่เอกสารของคุณเพื่อทำงานต่อไปทันที แต่น่าเสียดายที่มันเป็นไปไม่ได้สำหรับการเร่งความเร็วงานเชิงเส้นเช่นการวาด / การแสดงผลงานศิลปะ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.