คำแนะนำในการก่อสร้างและปรับปรุง

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

การเปิดใช้งานคอร์โปรเซสเซอร์ทั้งหมดทำอะไร?

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

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

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

วิธีเปิดใช้งานทุกอย่างบน Windows 7 เมื่อเปลี่ยนการตั้งค่า BIOS

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

ในกรณีนี้เมื่อตัดสินใจเลือกวิธีเปิดใช้งานเคอร์เนลทั้งหมดบน Windows 7 คุณต้องอาศัยการตั้งค่าเฉพาะ ในการดำเนินการนี้ให้ใช้ส่วนที่เรียกว่า "การปรับเทียบนาฬิกาขั้นสูง" โดยควรตั้งค่าเริ่มต้นเป็น "อัตโนมัติ" หรือ "แกนทั้งหมด" (ในการปรับเปลี่ยน BIOS ที่แตกต่างกัน ชื่อของส่วนอาจแตกต่างกันหรืออยู่ในแท็บที่มีพารามิเตอร์อื่น ๆ ).

หลังจากใช้การตั้งค่าที่เปลี่ยนแปลง คุณจะต้องรีบูตระบบเท่านั้น ตามทฤษฎีแล้ว หากไม่มีข้อผิดพลาดในตัว BIOS แกนประมวลผลทั้งหมดจะถูกใช้โดยอัตโนมัติ

วิธีเปิดใช้งานเคอร์เนลทั้งหมดบน Windows 7 โดยใช้เครื่องมือกำหนดค่าระบบ

อย่างไรก็ตาม แม้ว่าการตั้งค่า BIOS จะได้รับการกำหนดค่าอย่างถูกต้องและยังไม่ได้ใช้แกนประมวลผล คุณก็ยังสามารถใช้งานได้ เงินทุนของตัวเองระบบปฏิบัติการนั่นเอง

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

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

แต่มีข้อผิดพลาดอยู่ที่นี่ คุณต้องระมัดระวังอย่างมากกับการดำเนินการดังกล่าว สิ่งสำคัญคือต้องทราบว่าเมื่อเปิดใช้งาน แต่ละคอร์จะต้องมี RAM อย่างน้อย 1 GB (1024 MB) หากระดับ RAM ไม่ตรงตามค่าที่ต้องการ ก็ไม่มีประโยชน์ที่จะลอง วิธีนี้คุณจะได้รับผลตรงกันข้ามเท่านั้น ในกรณีนี้ เรากำลังพูดถึงคอมพิวเตอร์เครื่องเขียนที่ประดิษฐ์ด้วยมือ สิ่งนี้ไม่ได้คุกคามแล็ปท็อป (หากไม่ได้เปลี่ยนอุปกรณ์) เนื่องจากผู้ผลิตรายใดรายหนึ่งคำนึงถึงความเป็นไปได้ในการใช้คอร์ทั้งหมดของระบบโปรเซสเซอร์ โปรดทราบว่าตามกฎแล้วสำหรับโปรเซสเซอร์ 2 คอร์ RAM อย่างน้อย 2 GB จะสอดคล้องกันสำหรับโปรเซสเซอร์ 4 คอร์ - อย่างน้อย 4 GB เป็นต้น

ต้องปิดใช้งานรายการการดีบักและการบล็อก PCI

แทนที่จะเป็นคำหลัง

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

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

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

วิธีเปิดใช้งานคอร์โปรเซสเซอร์ตัวที่สอง: คำแนะนำ

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

  1. จากเมนูเริ่ม เลือกเรียกใช้ ในหน้าต่างที่ปรากฏขึ้น ให้ป้อนคำสั่ง "msconfig" หรือคุณสามารถใช้คีย์ผสม Win + R เพื่อเปิดหน้าต่าง Run ขึ้นมา
  2. ในหน้าต่างที่ปรากฏขึ้น ให้ไปที่แท็บ "ดาวน์โหลด" รายการจะเปิดขึ้นในตำแหน่งที่คุณต้องเลือกรายการที่คุณใช้ ระบบปฏิบัติการ(ในกรณีมีการติดตั้งหลายเครื่องในคอมพิวเตอร์) ตอนนี้คลิกที่ปุ่ม "ตัวเลือกขั้นสูง"
  3. คุณจะเห็นรายการ "จำนวนโปรเซสเซอร์" ทำเครื่องหมายที่ช่องถัดจากนั้น และเลือกหมายเลข “2” จากเมนูแบบเลื่อนลง นอกจากนี้ โปรดใส่ใจกับรายการ "การดีบัก" และ "การปรับสมดุล PCI" คุณต้องตรวจสอบให้แน่ใจว่าไม่มีเครื่องหมายถูกในฟังก์ชันเหล่านี้
  4. ตอนนี้คลิก "ตกลง" จากนั้น "ใช้"
  5. ปิดหน้าต่างและโปรแกรมที่รันอยู่ทั้งหมด บันทึกเอกสารที่ยังไม่ได้บันทึก ไปที่เมนูเริ่มแล้วรีสตาร์ทคอมพิวเตอร์
  6. หลังจากรีบูต ให้เปิดตัวจัดการงาน ซึ่งสามารถเข้าถึงได้โดยใช้แป้นพิมพ์ลัด "Ctrl+Alt+Del" ในตัวจัดการ เปิดแท็บ "ประสิทธิภาพ"
  7. หากเชื่อมต่อคอร์ที่ 2 คุณจะสามารถสังเกตกราฟ "ประวัติการโหลด CPU" สองกราฟแยกกัน
  8. เพื่อการควบคุมการทำงานของโปรเซสเซอร์ที่ละเอียดยิ่งขึ้น คุณสามารถกำหนดคอร์ที่แตกต่างกันเพื่อรันบางโปรแกรมได้ ในการดำเนินการนี้ไปที่แท็บ "กระบวนการ" และคลิกขวาที่โปรแกรมที่ต้องการเลือก "ตั้งค่าการจับคู่"
  9. หลังจากนี้ คุณจะมีโอกาสเลือกการทำงานของเคอร์เนลหนึ่งหรือเคอร์เนลอื่น (หรือทั้งหมดรวมกัน) เพื่อให้บริการแอปพลิเคชันเฉพาะ

ในทำนองเดียวกัน คุณสามารถเปิดใช้งานแกนประมวลผลทั้งหมดได้

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

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

การใช้โปรเซสเซอร์แบบมัลติคอร์เมื่อเปิดเครื่องคอมพิวเตอร์

ใน Windows 7 ไปที่ "เริ่ม" “ทุกโปรแกรม”, “มาตรฐาน” และเปิดยูทิลิตี “Run”

หน้าต่างจะปรากฏขึ้นโดยที่เราพิมพ์คำสั่ง msconfig.phpและคลิก "ตกลง"

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

เพียงรีสตาร์ทคอมพิวเตอร์แล้วสังเกตผลลัพธ์ ขอให้โชคดี!

ปัจจุบันมีคอมพิวเตอร์จำนวนหนึ่งที่พลังการประมวลผลสามารถทำให้คนไม่กี่คนประหลาดใจได้ พีซีและแล็ปท็อป 4- หรือ 6-core ไม่ทำให้ผู้คนประหลาดใจ แต่ก็มีผู้มาใหม่ในสาขานี้ที่สนใจทุกสิ่งและต้องการทราบข้อมูลให้มากที่สุด วันนี้เราจะมาดูคำถามที่น่าสนใจ: วิธีเปิดใช้งานคอร์ทั้งหมดบนคอมพิวเตอร์ Windows 10 เพื่อเพิ่มประสิทธิภาพ

หากคุณต้องการทราบ คุณสามารถค้นหาข้อมูลต่างๆ ได้ เช่น การใช้โปรแกรม คู่มือคอมพิวเตอร์ หรือความสามารถมาตรฐานของ Windows ตอนนี้เรามาดูวิธีที่เป็นไปได้ทั้งหมดกัน

คอมพิวเตอร์มีกี่คอร์

คู่มือซีพียู

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

ข้อมูลเกี่ยวกับ CPU สามารถดูได้โดยไปที่เมนูที่เกี่ยวข้อง โดยคลิกขวาที่เมนู Start แล้วเลือก "ระบบ", ดูที่บล็อก "ระบบ"- แต่จะแสดงเฉพาะรุ่นโปรเซสเซอร์เท่านั้น ส่วนที่เหลือจะต้องค้นหาที่อื่น

เครื่องมือ Windows 10

มาเปิดตัวจัดการอุปกรณ์กัน ซึ่งสามารถทำได้โดยป้อนในช่องค้นหา "ตัวจัดการอุปกรณ์".

การค้นหาแท็บ "โปรเซสเซอร์"และเปิดมัน จำนวนคะแนน จำนวนคอร์บนโปรเซสเซอร์ของคุณ

สาธารณูปโภคพิเศษ

ตอนนี้เรามาดูโปรแกรมของบุคคลที่สามหลายโปรแกรมที่จะช่วยให้เรากำหนดจำนวนคอร์ในโปรเซสเซอร์

CPU-Z

มีประโยชน์และ โปรแกรมฟรี CPU-Z แสดงคุณลักษณะหลายประการของคอมพิวเตอร์หรือส่วนประกอบต่างๆ มันง่ายและไม่เรียกร้อง

หากต้องการดูข้อมูลเกี่ยวกับคอร์ ให้ไปที่แท็บ CPU และดูที่เส้น "จำนวนคอร์ที่ใช้งานอยู่".

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

ดาวน์โหลดโปรแกรม รันแล้วไปที่แท็บ “บอร์ดระบบ”, ไกลออกไป "ซีพียู"- ปิดกั้น "มัลติซีพียู"แสดงให้เราเห็นจำนวนคอร์

ในโปรแกรมเดียวกันคุณสามารถไปที่แท็บได้ "คอมพิวเตอร์", แล้ว “ข้อมูลโดยย่อ”ในบล็อก “บอร์ดระบบ”คลิกที่ชื่อโปรเซสเซอร์ที่บรรทัด “ประเภทซีพียู”.

โปรเซสเซอร์ใช้คอร์จำนวนเท่าใด

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

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

วิธีเปิดคอร์ทั้งหมดของคอมพิวเตอร์หรือแล็ปท็อป

ไม่มีทาง. เคอร์เนลในคอมพิวเตอร์สมัยใหม่ทุกเครื่องทำงานได้โดยไม่มีข้อจำกัดเสมอ เหตุใดนักพัฒนาจึงควรจำกัดโปรเซสเซอร์และหน่วยความจำ โดยเฉพาะอย่างยิ่งเมื่อใช้ Windows

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

แม้ว่าตอนนี้คุณพยายามเปลี่ยนการตั้งค่าเป็นค่าสูงสุด แต่ก็ไม่มีอะไรเปลี่ยนแปลง คุณสามารถดูสิ่งนี้ได้ด้วยตนเองโดยใช้คำแนะนำด้านล่าง

ทุกอย่างง่ายดายที่นี่ ทำตามคำแนะนำเหล่านี้:

  • คลิก วิน+อาร์และเข้าไปในหน้าต่าง msconfig.php
  • จากนั้นไปที่ "ตัวเลือกขั้นสูง".
  • ใส่เครื่องหมายบน "จำนวนโปรเซสเซอร์"และ “หน่วยความจำสูงสุด”ให้ยกเลิกการเลือกช่องที่เหลือ
  • ในรายการ "หน่วยความจำสูงสุด" ให้ระบุค่าสูงสุด


เมื่อเสร็จแล้ว ให้บันทึกการเปลี่ยนแปลงและรีสตาร์ทคอมพิวเตอร์

เปิดใช้งานคอร์ทั้งหมดโดยใช้ BIOS

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

หากคุณตัดสินใจที่จะลองเปิดใช้งานเคอร์เนลผ่าน BIOS คุณต้องไปที่ส่วนนี้ การปรับเทียบนาฬิกาขั้นสูงและตั้งค่า "คอร์ทั้งหมด", หรือ "อัตโนมัติ".

ปัญหาที่นี่คือในเมนบอร์ดและแล็ปท็อปเวอร์ชันต่างๆ ส่วนต่างๆ ใน ​​BIOS จะถูกเรียกแตกต่างกัน ดังนั้นฉันจึงไม่สามารถบอกได้อย่างแน่ชัดว่าจะไปที่ไหน

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







การแนะนำ

เมื่อเขียนบทความนี้ ฉันไม่ได้กำหนดหน้าที่อธิบายการใช้งานซอฟต์แวร์บางอย่างด้วยตนเอง ซึ่งปัญหาทั้งหมดที่เกี่ยวข้องกับการใช้มัลติเธรด (MT) ใน . นี่คือตัวอย่างเพียงหนึ่งในการใช้งานที่เป็นไปได้ของมัลติเธรดในเอ็นจิ้นเกม ซึ่งจริงๆ แล้วใช้ในเกม PulseRacer สำหรับ Xbox เมื่อเร็ว ๆ นี้หัวข้อ MP ในเกมดูเหมือนเป็นที่สนใจของโปรแกรมเมอร์หลายคน นอกจากนี้ยังมีข้อมูลที่แตกต่างกันมากมายเกี่ยวกับฟังก์ชั่นของระบบ ซิงโครอ็อบเจ็กต์ต่างๆ สำหรับการใช้มัลติเธรดในโปรแกรม แต่หัวข้อวิธีใช้คุณสมบัติเหล่านี้ทั้งหมดในเกมนั้นมีความครอบคลุมไม่ดีนัก โดยไม่ต้องบังคับให้โปรแกรมเมอร์ทุกคนที่ทำงานกับโปรเจ็กต์นี้ เข้าใจหลักการของมัลติเธรด วิธีใช้วัตถุซิงโครไนซ์ และสิ่งอื่น ๆ ที่ไม่จำเป็นสำหรับเขา ทุกวันนี้ มีเพียงไม่กี่คนที่จะต้องประหลาดใจกับความจริงที่ว่าโปรแกรมเมอร์เกมอาจมีความเข้าใจเพียงเล็กน้อยเกี่ยวกับฟังก์ชั่นของระบบ D3D หรือ และแน่นอนว่าทำไมเขาถึงต้องการสิ่งนี้เพราะมีเอ็นจิ้นกราฟิก (และผู้พัฒนาของพวกเขา) แต่ก็ค่อนข้างสมเหตุสมผลที่จะสรุปว่าควรมีเอ็นจิ้น MP ที่จะแก้ไขปัญหาที่คล้ายกัน หนึ่งในการใช้งานที่เป็นไปได้ของเอ็นจิ้นดังกล่าว เหตุผลที่กระตุ้นให้เขียนมัน ปัญหาและในความคิดของฉันบางส่วน วิธีแก้ปัญหาที่ประสบความสำเร็จ จะมีการหารือในบทความนี้ ที่นี่ฉันจะเตือนคุณทันทีว่าหัวข้อของการใช้มัลติเธรดในเกมนั้นกว้างขวางมากและเพื่อลดขนาดของบทความฉันไม่ต้องพูดถึงหรือให้เหตุผลพื้นฐานที่ชัดเจนหรือน้อยกว่าจากมุมมองของฉัน การตัดสินใจ ดังนั้นหาก มีคำถามเกิดขึ้น ฉันพร้อมจะพูดคุยเสมอ

ข้อดีและข้อเสียของการใช้มัลติเธรดในเกม

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

ข้อดี

1. เพิ่มความเร็วของโปรแกรม รวมถึงบนระบบที่ใช้โปรเซสเซอร์ตัวเดียวคำถามอาจเกิดขึ้น: ประสิทธิภาพที่เพิ่มขึ้นในโปรแกรม MP บนระบบโปรเซสเซอร์เดี่ยวมาจากไหน เหตุผลก็คือ แม้ว่าจะมีโปรเซสเซอร์กลางเพียงตัวเดียว แต่ไม่ใช่โปรเซสเซอร์เพียงตัวเดียว คอมพิวเตอร์ยังมีโปรเซสเซอร์สำหรับการ์ดแสดงผล ตัวควบคุมดิสก์ การ์ดเสียง การ์ดเครือข่าย ตัวควบคุม DMA อุปกรณ์ต่อพ่วงต่างๆ เป็นต้น ดังนั้น ต้องขอบคุณการทำงานแบบขนานกับโปรเซสเซอร์เหล่านี้ทั้งหมดและจะมีการเพิ่มประสิทธิภาพของระบบโดยรวม ตัวอย่างของการขนานดังกล่าวมีดังต่อไปนี้ นอกจากนี้อย่าลืมเกี่ยวกับเทคโนโลยีเช่น HyperThreading ซึ่งแม้จะเป็นเรื่องธรรมดาก็ตาม คอมพิวเตอร์สำหรับเล่นเกมการประมวลผลหลายอย่างเริ่มปรากฏขึ้น

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

ข้อบกพร่อง

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

2. จำเป็นต้องพัฒนาเทคนิคใหม่ในการเขียนโปรแกรมเพราะของเก่าไม่เป็นที่ยอมรับเสมอไป ตัวอย่างเช่น การใช้ตัวแปรคงที่ส่วนกลางในสภาพแวดล้อม MP ซึ่งตัวแปรทำงานพร้อมกันจากเธรดที่แตกต่างกัน เป็นสิ่งที่ยอมรับไม่ได้เนื่องจากความเป็นไปได้ที่เนื้อหาจะเสียหาย

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

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

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

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

การเขียนเครื่องยนต์ MP

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

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

ด้วยเหตุนี้เวอร์ชันถัดไปจึงมีลักษณะดังนี้:
1. มีกลุ่มเธรด (อาร์เรย์ของคลาส THREAD)
2. เธรดมีรายการส่วนทั้งหมดที่ทำงานอยู่ (SECTION)
3. ส่วนสามารถรับและส่งคำสั่งแบบอะซิงโครนัสไปยังส่วนอื่น ๆ รวมถึงสร้างส่วนอื่นและยุติได้
4. โปรแกรมจะหยุดทำงานเมื่อไม่มีส่วนใดเหลืออยู่ในกลุ่มเธรด

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

เพื่อความชัดเจน รหัสเทียมขนาดเล็กของการประกาศส่วนในไฟล์ hpp:

คลาส A_SECTION: สาธารณะ THREAD_SECTION ( //ถูกเรียกเมื่อได้รับข้อความ SystemMessage โมฆะเสมือน (คำสั่ง int, พารามิเตอร์ DWORD, const ...* data, const ...* จาก) ; //ถูกเรียกเมื่อสร้างส่วนจากส่วนอื่นโมฆะเสมือนเริ่มต้น (พารามิเตอร์ DWORD, const ...* ข้อมูล, const ...* จาก) ;

สาธารณะ : // คำสั่งคงที่ THREAD_MESSAGE INIT;

ข้อผิดพลาด THREAD_MESSAGE แบบคงที่; -

ฉันขออธิบายว่า THREAD_MESSAGE เป็นคลาสที่ออกแบบมาเพื่อสร้างตัวระบุเฉพาะสำหรับคำสั่งที่ส่งโดยส่วนต่างๆ:< 32768 ) ; }

คลาส THREAD_MESSAGE ( static int curr_max; int message; public : THREAD_MESSAGE(int count_=1 ) ; ตัวดำเนินการอินไลน์ int () const (ข้อความส่งคืน;) );

int THREAD_MESSAGE::curr_max=0 ; THREAD_MESSAGE::THREAD_MESSAGE(int count_) ( ข้อความ=curr_max; curr_max+=count_; ASSERT(curr_max รหัสแสดงปัญหาหลายประการทันที: 1. พารามิเตอร์อินพุตของฟังก์ชัน SystemMessage() ดึงดูดสายตาคุณทันที -

2. การใช้พารามิเตอร์ DWORD คู่หวานและ const ...* ข้อมูลสัมพันธ์กับความจำเป็นในการส่งพารามิเตอร์คำสั่ง หากมีพารามิเตอร์เพียงตัวเดียว พารามิเตอร์นั้นจะถูกแปลงและส่งผ่านไป พารามิเตอร์, วี ข้อมูลถูกเขียน โมฆะ- หากมีพารามิเตอร์หลายตัว ตัวชี้ไปยังโครงสร้างที่มีพารามิเตอร์จะถูกเขียนลงในข้อมูล พารามิเตอร์ขนาดโครงสร้าง โดยทั่วไปทุกอย่างที่นี่ไม่ดี ตั้งแต่การมองเห็นแย่ลงไปจนถึงความจำเป็นในการใช้การแปลงประเภท พารามิเตอร์และในดัชนี ข้อมูลซึ่งไม่ช้าก็เร็วจะนำไปสู่ความเสียหายของหน่วยความจำและข้อผิดพลาดที่ตรวจพบยากอื่นๆ

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

การแก้ปัญหาด้วยตัวชี้จาก

ปัญหาในการตรวจสอบความถูกต้องของตัวชี้ไปยังส่วนต่างๆ สามารถแก้ไขได้หากใช้ตัวชี้อัจฉริยะที่มีการนับจำนวนการอ้างอิงแทนตัวชี้ปกติ จากนั้นหากยังมีคนอยู่ วัตถุที่ชี้ไป จะไม่ถูกลบจนกว่าพอยน์เตอร์ตัวสุดท้ายจะหายไป ข้อเสียของโครงร่างนี้คือหน่วยความจำถูกทิ้งเกลื่อนไปด้วยวัตถุที่ไม่จำเป็น แต่ไม่ถูกลบและเนื่องจากการคัดลอกตัวชี้นี้อย่างต่อเนื่องเมื่อส่งคำสั่งฟังก์ชัน InterlockedIncreation() และ InterlockedDecreatment() จะถูกเรียกบ่อยเกินไปซึ่ง ไม่เป็นที่ต้องการ ดังนั้น เพื่อระบุส่วนต่างๆ แทนที่จะใช้พอยน์เตอร์ ฉันจึงตัดสินใจใช้ตัวระบุเฉพาะ (UID) ในความคิดของฉัน เนื่องจาก GUID ของระบบมีขนาดใหญ่เกินไปและมีฟังก์ชันที่ไม่จำเป็น ฉันจึงใช้ของตัวเองซึ่งมีขนาดกะทัดรัดกว่าและมีฟังก์ชันการทำงานที่คล้ายคลึงกัน ในกรณีของฉัน ฉันใช้คลาสที่มีสี่ฟิลด์: หมายเลขเธรด, ดัชนีในอาเรย์ส่วน, หมายเลขส่วนในขณะที่สร้าง, เวลาสร้างส่วนเป็นเครื่องหมายถูก ดังนั้น GUID เดียวกันจะถูกสร้างขึ้นสำหรับส่วนต่างๆ ได้ก็ต่อเมื่อตัวนับหมายเลขซีเรียลของส่วนล้นภายในขีดเดียวเท่านั้น ในการใช้งานของฉัน สิ่งนี้จะเป็นไปได้ก็ต่อเมื่อมีการสร้างส่วนมากกว่า 4294967296 ส่วนภายในหนึ่งมิลลิวินาที ซึ่งไม่น่าเป็นไปได้ ดังนั้นเมื่อค้นหาส่วนที่จะส่งคำสั่งไป ก็สามารถตรวจสอบได้อย่างถูกต้องเสมอว่าส่วนนี้ยังคงมีอยู่หรือถูกลบไปแล้ว หากผู้รับคำสั่งถูกลบไปแล้ว คำสั่งนั้นจะถูกละเว้นอย่างปลอดภัย โดยไม่ต้องพยายามเรียกส่วนระยะไกล GUID นี้ช่วยให้คัดลอกและจัดเก็บได้ง่าย และยังไม่รวมความเป็นไปได้ที่จะใช้เป็นตัวชี้สำหรับการเข้าถึงตัวแปรส่วนและฟังก์ชันจากเธรดอื่นได้โดยตรง



หากคุณสังเกตเห็นข้อผิดพลาด ให้เลือกส่วนของข้อความแล้วกด Ctrl+Enter
แบ่งปัน:
คำแนะนำในการก่อสร้างและปรับปรุง