ระบบปฏิบัติการจัดสรรแต่ละกระบวนการให้กับแกนที่แยกจากกันหรือไม่?


15

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

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


โฟลว์พื้นฐานสำหรับคำถามนี้และคำตอบคือสมมติฐานว่ากระบวนการเดียวเป็นเธรดเดี่ยว นี่ไม่ใช่กรณีในหลาย ๆ กรณี และแม้ว่ากระบวนการนี้จะเป็นเธรดเดียว แต่หลายไลบรารีระบบ / dll จะเพิ่มเธรดของตัวเอง
harrymc

คำตอบ:


12

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


คำสำคัญที่นี่คือถ้าคุณมีแอปพลิเคชั่นที่ใช้ตัวประมวลผลจำนวนมาก - นั่นเป็นสถานการณ์ที่ผิดปกติสำหรับผู้ใช้ส่วนใหญ่
Gilles 'หยุดความชั่วร้าย'

ขอบคุณสำหรับคำตอบ ใช่กรณีหลังคือสิ่งที่ฉันพยายามจะอธิบาย
Doug T.

3

หากต้องการเพิ่มคำตอบของ @ heavyyd เหตุผลสำหรับสิ่งนี้คือระบบปฏิบัติการไม่มีความสามารถในการพิจารณาว่าส่วนใดของกระบวนการที่ตกลงเพื่อให้ทำงานแบบขนานและไม่ได้ หากโปรแกรมไม่ได้รับการออกแบบให้ทำงานบนแกนคู่ขนานคุณสามารถมีรูทีนภายในแอปพลิเคชันที่ออกแบบมาเพื่อให้ทำงานตามลำดับในเวลาเดียวกัน ซึ่งอาจทำให้เกิดปัญหาได้ทุกประเภท (เช่นถ้ารูทีน 2 รายการใช้บล็อกหน่วยความจำเดียวกัน แต่ไม่ได้หมายถึงให้เรียกใช้ในเวลาเดียวกัน)

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


ขอบคุณ ฉันเข้าใจ. คำถามของฉันอาจมีคำพูดไม่ดี ฉันต้องการถามเพิ่มเติมเกี่ยวกับกระบวนการวางระบบปฏิบัติการบนแกนที่แยกต่างหาก ไม่ได้ทำให้กระบวนการแบบเธรดเดี่ยวขยายขอบเขตแกนประมวลผลอย่างน่าอัศจรรย์
Doug T.

3

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

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

แอปพลิเคชั่นแบบเธรดเดียวจะถูกใส่โดยอัตโนมัติไปยังคอร์สำรอง - ฉันไม่แน่ใจเกี่ยวกับเทคโนโลยีที่อยู่เบื้องหลังสิ่งนี้ แต่ฉันรู้ว่ามันใช้งานได้ค่อนข้างดี


2

ความรู้สึกเริ่มแรกของคุณถูกต้อง - มีความเอียงเชิงลบต่อหลายคอร์และมันไม่ใช่สิ่งที่สมควรได้รับจริงๆ

ย้อนกลับไปในวันที่ผู้ใช้ส่วนใหญ่ใช้เดสก์ท็อปพีซีเพื่อการประมวลผลคำอย่างง่ายอาจมีข้อโต้แย้ง แต่ทุกวันนี้ด้วยสิ่งต่างๆเช่นเบราว์เซอร์ที่มีหลายแท็บแต่ละอันอยู่ในกระบวนการของตัวเอง (โครเมี่ยมและเช่นการแยกระดับกระบวนการสำหรับแท็บ) รวมถึงสิ่งต่าง ๆ เช่นตัวถอดรหัสวิดีโอภายในหน้าเว็บและงานพิเศษที่สามารถถ่ายได้ง่าย การเรนเดอร์เอฟเฟ็กต์ aka css3 แม้แต่เบราว์เซอร์เพียงอย่างเดียวก็สามารถพิสูจน์ได้ว่าเป็นเหตุผลที่ทำให้ RAM เพิ่มขึ้นและแกนประมวลผลบางส่วน

เพิ่มความจริงที่ว่าผู้ใช้บางคนอาจเล่นเกมบนพีซีเครื่องนี้หรือใช้เครื่องมือเช่น Garageband, Imovie, Handbrake และ Cores หลาย ๆ อันก็เป็นประโยชน์อย่างมาก

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

โดยทั่วไปคุณพูดถูก แต่จำนวนแกนที่มีประสิทธิภาพมากที่สุดคือเท่าไหร่ 2? 4? 12? สิ่งนี้น่าจะขึ้นอยู่กับนิสัยของผู้ใช้ ... ฉันมักจะ 2-4 คนสำหรับผู้ใช้ส่วนใหญ่ แต่ฉันคาดเดาเท่านั้น

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