ลำดับความสำคัญของการทำงานกับตัวจัดการงานและฉันควรตั้งค่านี้เมื่อใด / ไม่


30

ฉันได้ตั้งค่าลำดับความสำคัญของกระบวนการเพื่อดูว่ามันเกิดอะไรขึ้นจริง แต่เดาว่า ... ไม่มีอะไร; มันทำงานในลักษณะเดียวกัน ...

ฉันพบใน Google ว่าลำดับความสำคัญไม่ได้เชื่อมโยงกับความเร็วในการประมวลผลจริงหรือไม่ ถ้าอย่างนั้นทำไม ถ้ากระบวนการมีลำดับความสำคัญสูงสุดกระบวนการนั้นจะไม่เร็วขึ้นใช่หรือไม่


4
คำตอบสั้น ๆ : When should I set [priorities in Task Manager]? แทบไม่เคยเลย
Dan Henderson

2
อีกสิ่งที่สำคัญที่ต้องเข้าใจคือการจัดลำดับความสำคัญในการลดจำนวนงานที่ระบบสามารถทำได้ นี่คือสาเหตุที่ระบบปฏิบัติการเดสก์ท็อปทั่วไปไม่ใช่ระบบปฏิบัติการตามเวลาจริง และยิ่งคุณทำให้มันทำงานเหมือนระบบปฏิบัติการแบบเรียลไทม์ประสิทธิภาพก็จะน้อยลง ตัวอย่างเช่นการขัดจังหวะการระเบิดแคช งานที่มีลำดับความสำคัญต่ำกว่ายังคงต้องดำเนินการให้เสร็จสิ้นและยังคงแข่งขันกับ I / O การทำอย่างมีประสิทธิภาพน้อยลงในกลุ่มก้อนเล็ก ๆ ไม่เป็นประโยชน์ต่อใครเลย
David Schwartz

อย่าพยายามคิดสำหรับคอมพิวเตอร์ของคุณ คุณจะไม่ชนะ มันรู้วิธีจัดการกับเธรดของมันได้ดีกว่าคุณ
b1nary.atr0phy

คำตอบ:


52

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

ลำดับความสำคัญไม่ส่งผลกระทบต่อความเร็วในการประมวลผลซึ่งเป็นกระบวนการที่มีลำดับความสำคัญสูงกว่าจะไม่สามารถทำงานได้เร็วขึ้นหรือแม้แต่ใช้เวลา CPU มากขึ้น ... ไม่ใช่หากเป็นเพียงสิ่งเดียวที่ต้องการใช้ CPU

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

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

แต่ละเธรดอยู่ในหนึ่งในหลาย ๆ สถานะการกำหนดเวลาเสมอ สถานะที่พบบ่อยที่สุดคือ: กำลังรอ (* nix เรียกสิ่งนี้ว่า "บล็อก" ในทั้งสองระบบปฏิบัติการนี้หมายถึงการรอ I / O หรือคล้ายกันใช้เวลา CPU ไม่และไม่ต้องการ) พร้อม (ต้องการใช้เวลาของ CPU แต่ไม่มี CPU ให้ใช้ในขณะนี้); และวิ่ง การรันเธรดเท่านั้นที่ใช้เวลา CPU เช่นถ้ากระบวนการไม่มีการรันเธรดจะเห็นการใช้เวลา CPU% เป็นศูนย์ในเครื่องมือเช่นตัวจัดการงาน

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

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

แต่เธรดที่ทำสิ่งต่าง ๆ เช่นการเรนเดอร์วิดีโอหรือการเรนเดอร์ภาพ 3D อาจใช้เวลาส่วนใหญ่ในการ "คำนวณ" ใน CPU และรอ I / O เพียงเล็กน้อย เธรดเหล่านี้มักถูกเรียกว่า "การคำนวณขอบเขต" ซึ่งหมายความว่าประสิทธิภาพโดยรวมของพวกเขาถูก จำกัด ด้วยความเร็วของ CPU เป็นหลัก

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

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

หากสองเธรดต้องการใช้ CPU และมีความสำคัญเท่ากันเธรดเหล่านั้นจะถูกกำหนดเวลาผ่านสิ่งที่เรียกว่า "การแบ่งส่วนเวลา" และเมื่อเวลาผ่านไปแต่ละชุดจะได้รับเวลาประมาณ 50% ของเวลาของ CPU ในขณะที่ถ้าพวกเขามีลำดับความสำคัญแตกต่างกันเธรดที่มีลำดับความสำคัญสูงกว่าจะได้รับ 100% และระดับล่างจะไม่ได้รับอะไรเลย

(ในทางปฏิบัติมันจะไม่ได้รับอะไรเลยเพราะจะได้รับการเพิ่มระดับความสำคัญการหลีกเลี่ยงความอดอยากเป็นระยะ ๆ ซึ่งอาจให้ msec สองสามสิบทุก ๆ 4 หรือ 5 วินาทีหรือมากกว่านั้น แต่นี่ไม่ใช่ข้อยกเว้นสำหรับ ชนะ "เพราะทำโดยการปรับระดับความสำคัญของเธรดที่หิวโหย)

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

(สองคนปรากฏตัวที่ซุปเปอร์มาร์เก็ตและมีตัวตรวจสอบสองตัวฟรีหนึ่งในลูกค้ามีการ์ด "ไปที่หัวบรรทัด" ไม่เป็นไร)

tl; dr version (จนถึงตอนนี้): ลำดับความสำคัญไม่เกี่ยวกับ "ผู้ที่ได้รับเวลา CPU เท่าไร" แต่จะเป็น "ผู้ที่จะทำงานก่อน"

ฉันจะไม่เข้าไปไฮเปอร์เธรดที่นี่มากนักยกเว้นจะบอกว่า Windows ปฏิบัติกับ "ตัวประมวลผลเชิงตรรกะ" สองตัวในแกนที่เป็นแกนเดียวกับที่มันจะจัดการกับแกนถ้า HT ถูกปิด นั่นคือพวกเขากำลังใช้ซีพียู "ของจริง" โดยมีข้อยกเว้นนี้: Windows จะพยายามอย่างหนักที่จะไม่ใช้ LP มากกว่าหนึ่งรายการในแกนในเวลาเดียวกัน นั่นคือคุณไม่ได้เริ่มเห็น LP ทั้งสองในแกนที่ใช้จนกว่าคุณจะมีเธรดจำนวนมากที่พยายามเรียกใช้ทั้งหมดในเวลาเดียวกัน นี่เป็นเพราะ "ตัวประมวลผลเชิงตรรกะ" สองตัวไม่ให้อะไรกับคุณเช่นเดียวกับประสิทธิภาพที่เพิ่มขึ้นเป็นสองเท่าของแกนที่ไม่ใช่ไฮเปอร์เธรดเดี่ยว

เกี่ยวกับ "ลำดับความสำคัญพื้นฐาน": Windows จะปรับ ("เพิ่ม" และ "สลาย") ลำดับความสำคัญปัจจุบันของเธรดตามสิ่งที่พวกเขาทำเมื่อเร็ว ๆ นี้ เธรดที่เพิ่งเสร็จสิ้นการดำเนินงาน I / O โดยปกติจะเป็นรอยหรือสองด้านบนฐาน หัวข้อ UI (เธรดที่ใช้งานหน้าต่าง) มักจะสูงกว่านี้มาก เธรดที่ผูกกับ CPU มักจะอยู่ที่ฐาน จุดประสงค์ของการทำเช่นนี้คือเพื่อรักษาการตอบสนองใน UI ของโปรแกรมและเพื่อให้คำขอ IO ไหลไปสู่สิ่งต่าง ๆ เช่นดิสก์

โปรแกรม (กระบวนการ) สามารถเปลี่ยนลำดับความสำคัญพื้นฐานของแต่ละเธรดภายในช่วงที่กำหนดโดยลำดับความสำคัญของกระบวนการ (สิ่งที่คุณตั้งไว้ในตัวจัดการงาน) แต่โปรแกรมส่วนใหญ่ไม่ได้ใส่ใจ (ควรมีมากกว่านี้)

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

สรุปแล้ว...

มีเหตุผลที่จะปล่อยสิ่งต่าง ๆ ส่วนใหญ่ไว้ที่ "ปกติ" หากคุณไม่ทำเช่นนั้นคุณสามารถสิ้นสุดสิ่งที่หิวโหยที่คุณต้องการทำงานได้อย่างง่ายดาย (แม้ว่าคุณอาจไม่รู้ว่ามีอยู่) เช่นฟังก์ชันล้างแคชดิสก์ของระบบปฏิบัติการ อันที่จริงกระบวนการหลายอย่างของ OS จะเป็นอย่างอื่นนอกเหนือจาก Normal และควรทิ้งไว้ในทุกที่ที่ Windows วางไว้

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

ไม่เคยตั้งค่าใด ๆ กับคลาสลำดับความสำคัญเรียลไทม์ที่เรียกว่า

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

nb: แอปเครื่องเล่นวิดีโอใด ๆ ควรเลือกใช้คุณสมบัติ "การจัดตารางเวลามัลติมีเดีย" ใน Vista และใหม่กว่า สิ่งนี้จะให้ CPU มากถึง 80% ของ CPU โดยอัตโนมัติซึ่งคิดเป็นช่วงเวลาสั้น ๆ หากคุณไม่สามารถรับการเล่นที่ผิดพลาดได้โดยมีบางอย่างผิดปกติ

สำหรับรายละเอียดเพิ่มเติมดูบทที่หัวข้อและการกำหนดเวลาในWindows Internals 6th Editionโดย Solomon, Russinovich และ Ionescu

ดูคำตอบของฉันที่นี่สำหรับข้อมูลเกี่ยวกับการตั้งค่าลำดับความสำคัญของกระบวนการและเธรดและความหมายของคอลัมน์ "ลำดับความสำคัญ" ในตัวจัดการงาน


1
ยังไงก็ตามคำตอบของฉันสำหรับคำถามที่เชื่อมโยงต่อไปนี้เกี่ยวข้องกัน: superuser.com/questions/949030/…
Jamie Hanrahan

1
นอกจากนี้โดยวิธี: "Scheduling", "scheduler" ฯลฯ ที่นี่อ้างถึงรูทีนเคอร์เนลของ Windows ที่ตัดสินใจว่าเธรดใดควรรันและ CPU ใดที่ควรรัน ไม่ใช่เพื่อ "การกำหนดเวลางาน" ซึ่งเกี่ยวกับการเปิดใช้งานกระบวนการตามเวลาที่กำหนดหรือตอบสนองต่อทริกเกอร์ต่างๆ
เจมี่ Hanrahan

@JamieHanrahan ตกลงฉันย้ายที่นี่แล้ว: superuser.com/questions/1380473/…
Julien__

5

การปรับเปลี่ยนลำดับความสำคัญจะเปลี่ยนวิธีที่ระบบปฏิบัติการจัดสรรเวลา CPU ให้แก่แอปพลิเคชันที่กำลังรัน มันจะสร้างผลกระทบที่เห็นได้ชัดเจนหากการใช้งาน CPU โดยรวมอยู่ในระดับสูง

ตัวอย่างเช่นคุณเข้ารหัสวิดีโอและดูวิดีโออื่นในเวลาเดียวกัน แอปพลิเคชันการเข้ารหัสจะใช้พลังการประมวลผล 100% บนคอร์ CPU ทั้งหมดของคุณ เป็นผลให้แอปพลิเคชันอื่นอาจพูดติดอ่าง

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


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