1. แนวคิดที่สำคัญหลายประการเกี่ยวกับการพร้อมกันสูง
1.1 ซิงโครนัสและอะซิงโครนัส
ก่อนอื่นการซิงโครไนซ์และอะซิงโครนัสที่กล่าวถึงที่นี่อ้างถึงฟังก์ชั่น/วิธีการโทร
เห็นได้ชัดว่าการโทรแบบซิงโครนัสจะรอให้วิธีการกลับมาและการโทรแบบอะซิงโครนัสจะกลับมาทันที แต่การโทรแบบอะซิงโครนัสจะกลับมาทันทีไม่ได้หมายความว่างานของคุณจะเสร็จสมบูรณ์ มันจะตั้งค่าเธรดในพื้นหลังเพื่อดำเนินการต่อไป
1.2 การเกิดพร้อมกันและการขนาน
การเกิดขึ้นพร้อมกันและการขนานนั้นมีลักษณะคล้ายกันในลักษณะภายนอก ดังที่แสดงในรูปการขนานคือเมื่อมีการดำเนินการสองงานพร้อมกันในขณะที่การเกิดขึ้นพร้อมกันคือการทำงานทีละงานแล้วเปลี่ยนไปทำงานอื่น ดังนั้น CPU เดียวไม่สามารถขนานกันได้
1.3 โซนวิกฤต
พื้นที่วิกฤตใช้เพื่อแสดงทรัพยากรสาธารณะหรือข้อมูลที่ใช้ร่วมกัน มันสามารถใช้งานได้หลายเธรด แต่มีเพียงเธรดเดียวเท่านั้นที่สามารถใช้งานได้ครั้งละ เมื่อทรัพยากรพื้นที่วิกฤตถูกครอบครองเธรดอื่น ๆ จะต้องรอหากพวกเขาต้องการใช้ทรัพยากรนี้
1.4 การปิดกั้นและไม่ปิดกั้น
การปิดกั้นและการไม่ปิดกั้นมักจะอธิบายถึงอิทธิพลร่วมกันระหว่างหลายเธรด ตัวอย่างเช่นหากเธรดใช้ทรัพยากรพื้นที่วิกฤตเธรดอื่น ๆ ทั้งหมดที่ต้องการทรัพยากรนี้จะต้องรอในพื้นที่วิกฤตนี้และการรอคอยจะทำให้เธรดแขวน นี่คือการปิดกั้น ในเวลานี้หากเธรดที่ใช้ทรัพยากรไม่เต็มใจที่จะปล่อยทรัพยากรแล้วเธรดอื่น ๆ ทั้งหมดที่บล็อกในพื้นที่สำคัญนี้ไม่สามารถทำงานได้
การไม่ปิดกั้นช่วยให้หลายเธรดสามารถเข้าสู่โซนวิกฤตได้ในเวลาเดียวกัน
ดังนั้นประสิทธิภาพของการบล็อกโดยทั่วไปไม่ค่อยดี ตามสถิติทั่วไปหากเธรดถูกระงับในระดับระบบปฏิบัติการและได้เปลี่ยนบริบทมักจะใช้เวลา 80,000 รอบในการทำเช่นนี้
1.5 Deadlock, Hunger, Live Lock
การหยุดชะงักที่เรียกว่าหมายถึงการอุดตันที่เกิดจากทรัพยากรการแข่งขันหรือการสื่อสารซึ่งกันและกันในระหว่างกระบวนการดำเนินการของสองกระบวนการขึ้นไป หากไม่มีกองกำลังภายนอกพวกเขาจะไม่สามารถก้าวไปข้างหน้าได้ ในเวลานี้ระบบเรียกว่าการปิดกั้นหรือระบบมีการหยุดชะงัก กระบวนการเหล่านี้ที่รอคอยซึ่งกันและกันเรียกว่ากระบวนการหยุดชะงัก เช่นเดียวกับรถยนต์ในภาพด้านล่างต้องการก้าวไปข้างหน้า แต่ไม่มีใครสามารถก้าวไปข้างหน้าได้
อย่างไรก็ตามถึงแม้ว่าการหยุดชะงักเป็นปรากฏการณ์ที่ไม่ดี แต่ก็เป็นปัญหาที่คงที่ เมื่อมีการหยุดชะงักเกิดขึ้นกระบวนการจะติดอยู่และอัตราการเข้าพักของ CPU ก็เป็น 0 เช่นกันมันจะไม่ครอบครอง CPU มันจะถูกเรียกออกมา ค่อนข้างพูดมันค่อนข้างง่ายที่จะค้นพบและวิเคราะห์
สอดคล้องกับการหยุดชะงักคือล็อคสด
Live Lock หมายความว่าสิ่งที่ 1 สามารถใช้ทรัพยากรได้ แต่ช่วยให้สิ่งอื่น ๆ ใช้ทรัพยากรก่อน สิ่งที่ 2 สามารถใช้ทรัพยากรได้ แต่ยังช่วยให้สิ่งอื่น ๆ ใช้ทรัพยากรก่อนดังนั้นทั้งคู่ก็อ่อนน้อมถ่อมตนและไม่สามารถใช้ทรัพยากรได้
ตัวอย่างเช่นมันเหมือนกับว่าคุณได้พบใครบางคนบนถนนที่เกิดขึ้นในทิศทางตรงกันข้ามของคุณและพบคุณหัวคุณทุกคนต้องการปล่อยให้กันและกันไป คุณย้ายไปทางซ้ายและเขาย้ายไปทางซ้าย แต่พวกเขาทั้งสองยังไม่สามารถไปที่นั่นได้ ในเวลานี้คุณย้ายไปทางขวาและเขาย้ายไปทางขวาและดำเนินการต่อในลักษณะนี้
เมื่อเธรดได้รับทรัพยากรพบว่าเธรดอื่น ๆ ก็นึกถึงทรัพยากรนี้เพราะพวกเขาไม่ได้รับทรัพยากรทั้งหมดดังนั้นเพื่อหลีกเลี่ยงการหยุดชะงักพวกเขายอมแพ้ทรัพยากรทั้งหมดที่พวกเขาเก็บไว้ หากเธรดอื่นทำสิ่งเดียวกันพวกเขาต้องการทรัพยากรเดียวกันเช่น Holds A Resource, B ถือทรัพยากร B และหลังจากยอมแพ้ทรัพยากร A ได้รับทรัพยากร B และ B ได้รับทรัพยากรและสิ่งนี้ซ้ำแล้วซ้ำอีก
ล็อคสดนั้นยากที่จะตรวจจับได้มากกว่าการหยุดชะงักเพราะล็อคสดเป็นกระบวนการแบบไดนามิก
ความหิวหมายความว่าหนึ่งเธรดหรือมากกว่าไม่สามารถรับทรัพยากรที่จำเป็นได้ด้วยเหตุผลต่าง ๆ ซึ่งทำให้พวกเขาไม่สามารถดำเนินการได้
1.6 ระดับพร้อมกัน
ระดับพร้อมกัน: การปิดกั้นและการไม่ปิดกั้น (การไม่ปิดกั้นแบ่งออกเป็นอุปสรรคปราศจากล็อคและรอฟรี)
1.6.1 การบล็อก
เมื่อเธรดหนึ่งเข้าสู่ส่วนวิกฤตเธรดอื่น ๆ จะต้องรอ
1.6.2 การเข้าถึง
เมื่อเปรียบเทียบกับการกำหนดเวลาที่ไม่ปิดกั้นการปิดกั้นการจัดตารางเวลาเป็นกลยุทธ์ในแง่ร้ายซึ่งเชื่อว่าการปรับเปลี่ยนข้อมูลร่วมกันมีแนวโน้มที่จะทำให้ข้อมูลไม่ดี แทนที่จะปิดกั้นการกำหนดเวลามันเป็นกลยุทธ์ในแง่ดีซึ่งเชื่อว่าการปรับเปลี่ยนข้อมูลอาจไม่จำเป็นต้องทำให้ข้อมูลไม่ดี อย่างไรก็ตามมันเป็นกลยุทธ์ของการเข้ามาอย่างกว้างขวางและการออกอย่างเข้มงวด เมื่อพบว่ากระบวนการมีการแข่งขันข้อมูลและความขัดแย้งในพื้นที่วิกฤตวิธีการกำหนดเวลาที่ปราศจากสิ่งกีดขวางจะย้อนกลับข้อมูล
ในวิธีการกำหนดเวลาที่ปราศจากสิ่งกีดขวางนี้เธรดทั้งหมดจะเทียบเท่ากับการถ่ายภาพของระบบ พวกเขาจะพยายามถ่ายภาพรวมจนกว่าจะถูกต้อง
1.6.3 Lockless
สามารถเข้าถึงได้
ตรวจสอบให้แน่ใจว่ามีเธรดที่สามารถชนะได้
เมื่อเทียบกับการเข้าถึงการเข้าถึงการเข้าถึงไม่รับประกันว่าการดำเนินการจะเสร็จสมบูรณ์เมื่อมีการแข่งขันเพราะหากพบความขัดแย้งในการดำเนินการแต่ละครั้งมันจะพยายามต่อไป หากเธรดในพื้นที่วิกฤตรบกวนกันและกันมันจะทำให้เธรดทั้งหมดติดอยู่ในพื้นที่วิกฤตและจากนั้นประสิทธิภาพของระบบจะมีผลกระทบอย่างมาก
Lockless เพิ่มเงื่อนไขใหม่เพื่อให้แน่ใจว่าหนึ่งเธรดสามารถชนะการแข่งขันแต่ละครั้งซึ่งแก้ปัญหาของความสมบูรณ์แบบสิ่งกีดขวาง อย่างน้อยก็ทำให้มั่นใจได้ว่าเธรดทั้งหมดทำงานได้อย่างราบรื่น
รหัสต่อไปนี้เป็นรหัสการคำนวณที่ปราศจากล็อคโดยทั่วไปใน Java
Lockless เป็นเรื่องธรรมดาใน Java
ในขณะที่ (! AtomicVar.CompareAndset (localVar, localVar+1)) {localVar = AtomicVar.get (); -1.6.4 ไม่รอ
ไม่มีล็อค
เธรดทั้งหมดจะต้องเสร็จสิ้นภายในขั้นตอนที่ จำกัด
ไม่มีความหิวโหย
ก่อนอื่นสถานที่ที่ไม่มีการรอคอยอยู่บนพื้นฐานของการล็อคฟรี ฟรีล็อคมั่นใจว่าจะต้องมีการเข้าและออกในพื้นที่วิกฤต อย่างไรก็ตามหากลำดับความสำคัญของรายการสูงมากดังนั้นบางเธรดที่มีลำดับความสำคัญต่ำในพื้นที่วิกฤตอาจหิวและไม่สามารถออกจากพื้นที่วิกฤตได้ จากนั้นจะไม่มีการรอคอยที่จะแก้ปัญหานี้ซึ่งทำให้มั่นใจได้ว่าเธรดทั้งหมดจะต้องเสร็จสิ้นภายในขั้นตอนที่ จำกัด และโดยธรรมชาติแล้วไม่มีความหิว
ไม่ต้องรออยู่ในระดับสูงสุดของการขนานซึ่งสามารถเปิดใช้งานระบบนี้ให้ถึงสถานะที่เหมาะสม
กรณีทั่วไปโดยไม่ต้องรอ:
หากมีเพียงการอ่านเธรดและไม่มีเธรดเธรดสิ่งนี้จะต้องไม่ต้องรอ
หากมีทั้งการอ่านเธรดและเธรดเขียนและก่อนแต่ละเธรดการเขียนให้คัดลอกข้อมูลแล้วแก้ไขสำเนาแทนการแก้ไขข้อมูลต้นฉบับเนื่องจากไม่มีความขัดแย้งในการปรับเปลี่ยนสำเนาแล้วกระบวนการแก้ไขก็ไม่ได้รอ การซิงโครไนซ์ขั้นสุดท้ายเป็นเพียงการเขียนทับข้อมูลที่เขียนเท่านั้น
เนื่องจากข้อกำหนดการรอคอยนั้นค่อนข้างสูงและเป็นเรื่องยากที่จะนำไปใช้การล็อคจะถูกใช้อย่างกว้างขวางมากขึ้น
2. กฎหมายสำคัญสองประการเกี่ยวกับการขนาน
กฎหมายทั้งสองเกี่ยวข้องกับอัตราส่วนการเร่งความเร็ว
2.1 กฎหมายของ Amdahl
กำหนดสูตรการคำนวณและขีด จำกัด สูงสุดทางทฤษฎีของอัตราส่วนการเร่งความเร็วหลังจากการทำให้เป็นแบบขนานของระบบอนุกรม
คำจำกัดความอัตราส่วนการเร่งความเร็ว: อัตราส่วนการเร่งความเร็ว = เวลาที่ใช้เวลาใช้ก่อนการเพิ่มประสิทธิภาพ / เวลาที่ใช้ในการเพิ่มประสิทธิภาพของระบบ
ตัวอย่างเช่น:
อัตราส่วนการเร่งความเร็ว = เวลาที่ใช้เวลาใช้ก่อนการเพิ่มประสิทธิภาพ / เวลาของระบบที่ใช้หลังจากการปรับให้เหมาะสม = 500 /400 = 1.25
ทฤษฎีบทนี้แสดงให้เห็นว่าการเพิ่มจำนวนโปรเซสเซอร์ CPU ไม่จำเป็นต้องมีบทบาทที่มีประสิทธิภาพในการเพิ่มสัดส่วนของโมดูลขนานในระบบ โดยการเพิ่มจำนวนโปรเซสเซอร์แบบขนานอย่างสมเหตุสมผลสามารถรับอัตราส่วนการเร่งความเร็วสูงสุดด้วยการลงทุนที่เล็กที่สุด
2.2 กฎหมายของ Gustafson
อธิบายความสัมพันธ์ระหว่างจำนวนโปรเซสเซอร์อัตราส่วนอนุกรมและอัตราส่วนการเร่งความเร็ว
จากนั้นอัตราส่วนการเร่งความเร็ว = nf (n-1) // กระบวนการที่ได้รับจะถูกละเว้น
ตราบใดที่มีการขนานอย่างเพียงพออัตราส่วนการเร่งความเร็วจะเป็นสัดส่วนกับจำนวนซีพียู