ตามวิกิพีเดีย
การล็อกที่ใช้ร่วมกันบางครั้งเรียกว่า "read locks" และบางครั้งเรียกว่า "write locks"
คุณช่วยอธิบายเหตุผลเบื้องหลังของคำว่า "แชร์" และ "เอกสิทธิ์เฉพาะตัว" ได้ไหม
ตามวิกิพีเดีย
การล็อกที่ใช้ร่วมกันบางครั้งเรียกว่า "read locks" และบางครั้งเรียกว่า "write locks"
คุณช่วยอธิบายเหตุผลเบื้องหลังของคำว่า "แชร์" และ "เอกสิทธิ์เฉพาะตัว" ได้ไหม
คำตอบ:
ฉันเขียนคำตอบนี้เพราะฉันคิดว่านี่จะเป็นการเปรียบเทียบที่สนุก (และเหมาะสม):
คิดว่าวัตถุที่ล็อคได้เป็นกระดานดำ (ล็อคได้) ในห้องชั้นเรียนที่มีครู (นักเขียน) และนักเรียน (ผู้อ่าน) จำนวนมาก
ในขณะที่ครูกำลังเขียนบางสิ่ง (ล็อคพิเศษ) บนกระดาน:
ไม่มีใครสามารถอ่านได้เพราะมันยังคงถูกเขียนและเธอปิดกั้นมุมมองของคุณ => ถ้าวัตถุถูกล็อคเฉพาะล็อคที่ใช้ร่วมกันไม่สามารถรับได้
ครูคนอื่น ๆ จะไม่เกิดขึ้นและเริ่มต้นการเขียนอย่างใดอย่างหนึ่งหรือคณะกรรมการจะไม่สามารถอ่านได้และนักเรียนสับสน => ถ้าวัตถุถูกล็อคเฉพาะล็อคพิเศษอื่น ๆ ที่ไม่สามารถรับได้
เมื่อนักเรียนอ่าน (ล็อกที่ใช้ร่วมกัน) สิ่งที่อยู่บนกระดาน:
พวกเขาทั้งหมดสามารถอ่านสิ่งที่อยู่ในนั้นร่วมกัน => การล็อกที่ใช้ร่วมกันหลายรายการสามารถอยู่ร่วมกันได้
รอครูผู้สอนสำหรับพวกเขาที่จะเสร็จสิ้นการอ่านก่อนที่เธอจะล้างคณะกรรมการที่จะเขียนมากขึ้น => หากหนึ่งล็อคหรือใช้ร่วมกันมากขึ้นอยู่แล้วล็อคพิเศษไม่สามารถรับได้
lock()
เรียกที่ตามมาทั้งหมดหลังจาก คนแรกจะกลับมาทันทีและประสบความสำเร็จ กล่าวคือคุณสามารถล็อคสิ่งที่คุณเป็นเจ้าของได้สำเร็จ
writer
จะถูกกำหนดให้อยู่เหนือการรอผู้อ่านเมื่อล็อกเลือกว่าใครจะได้ล็อกต่อไป (เมื่อเจ้าของปัจจุบันปลดล็อก) นี้เป็นเรื่องเกี่ยวกับนโยบาย
ค่อนข้างตรงไปตรงมา การล็อกการอ่านเรียกอีกอย่างว่าการล็อกที่ใช้ร่วมกันเนื่องจากสามารถอ่านได้มากกว่าหนึ่งกระบวนการในเวลาเดียวกัน จุดสำคัญของการล็อกการอ่านคือการป้องกันไม่ให้เกิดการล็อกการเขียนโดยกระบวนการอื่น ในทางตรงกันข้ามการล็อกการเขียนจะยับยั้งการดำเนินการอื่น ๆ ทั้งหมดในขณะที่การดำเนินการเขียนเสร็จสิ้นซึ่งเป็นสาเหตุที่อธิบายว่าเป็นเอกสิทธิ์
ดังนั้นล็อคการอ่านจะบอกว่า "คุณสามารถอ่านได้แล้ว แต่ถ้าคุณต้องการเขียนคุณจะต้องรอ" ในขณะที่ล็อกการเขียนระบุว่า "คุณต้องรอ"
ฉันรู้ว่าคุณกำลังค้นคว้าเพื่อสนับสนุนการศึกษาของคุณ แต่ฉันไม่สามารถต้านทานแรงกระตุ้นในการบรรยายได้
การใช้การล็อคอย่างไร้ความสามารถเป็นสาเหตุหลักของปัญหาด้านประสิทธิภาพ การใช้ระบบล็อคที่แยกความแตกต่างของการอ่านและการล็อกเป็นการเริ่มต้นที่ดี แต่การออกแบบอย่างรอบคอบบางครั้งอาจช่วยลดความจำเป็นในการล็อกได้มาก ตัวอย่างเช่นไม่ควรเก็บสถานะเซสชันไว้ในคอลเล็กชันส่วนกลางเดียวต่อองค์ประกอบของรัฐ
ฉันได้เห็นสิ่งนี้จริง เป็นการออกแบบที่โหดเหี้ยมทำให้เกิดการชกมวยและการเปลี่ยนคอลเลคชันสำหรับการเปลี่ยนแปลงสถานะเซสชันครั้งล่าสุดทุกครั้งซึ่งนำไปสู่การล็อกการเขียนที่ยืดเยื้อ ค่าโสหุ้ยกำลังทำให้หมดความสามารถลดเซิร์ฟเวอร์ให้มีลักษณะการทำงานแบบเธรดเดียวได้อย่างมีประสิทธิภาพ
การรวมสถานะเซสชันทั้งหมดไว้ในโครงสร้างก็เป็นการปรับปรุงครั้งใหญ่ การเปลี่ยนแปลงสถานะเซสชันเป็นเพียงการเปลี่ยนแปลงค่าของสมาชิกของโครงสร้างสถานะของเซสชัน เนื่องจากไม่มีเซสชันอื่นใดที่มีโอกาสหรือแม้แต่โอกาสในการอ้างอิงสถานะของเซสชันโดยตรงคอลเลคชันเดียวที่อัปเดตคือรายการเซสชัน ด้วยเหตุนี้การล็อกจึงไม่จำเป็นอย่างยิ่งในระหว่างการฝึกโดยเฉพาะที่จุดเริ่มต้นและจุดสิ้นสุดและปริมาณงานเพิ่มขึ้น 3000
สถานการณ์การล็อกทั่วไปอื่น ๆ คือรีซอร์สที่ใช้ร่วมกันระหว่างเธรดของแอ็พพลิเคชันผู้ใช้ เฟรมเวิร์กที่ทันสมัยที่สุดกล่าวถึงสิ่งนี้โดยใช้ข้อความมากกว่าการล็อก เมื่อคุณ "เปลี่ยนไปใช้เธรด UI" คุณกำลังจัดคิวข้อความที่มีตัวชี้ฟังก์ชันและพารามิเตอร์บางตัว (หรือผู้รับมอบสิทธิ์และสแต็กเฟรมขึ้นอยู่กับการนำไปใช้งาน)
การล็อกแบบเอกสิทธิ์เฉพาะบุคคลหรือการเขียนช่วยให้สามารถเข้าถึงกระบวนการพิเศษสำหรับการเขียนไปยังส่วนที่ระบุของไฟล์ ในขณะที่มีการล็อกการเขียนไม่มีกระบวนการอื่นใดที่สามารถล็อกส่วนนั้นของไฟล์ได้
การล็อกที่ใช้ร่วมกันหรือการอ่านห้ามกระบวนการอื่นใดในการขอล็อกการเขียนในส่วนที่ระบุของไฟล์ อย่างไรก็ตามกระบวนการอื่น ๆ สามารถขอล็อกการอ่านได้
เพิ่มเติมเกี่ยวกับเรื่องนั้น: http://www.gnu.org/software/libc/manual/html_node/File-Locks.html
หลักการเดียวกันในด้านฐานข้อมูลเช่นกัน ตามเอกสารของ Oracle
โหมดล็อคพิเศษป้องกันไม่ให้แชร์ทรัพยากรที่เกี่ยวข้อง โหมดล็อคนี้ได้มาเพื่อแก้ไขข้อมูล ธุรกรรมแรกที่ล็อคทรัพยากรโดยเฉพาะคือธุรกรรมเดียวที่สามารถเปลี่ยนแปลงทรัพยากรได้จนกว่าจะมีการปลดล็อกเฉพาะ
โหมดล็อคการแชร์อนุญาตให้แชร์ทรัพยากรที่เกี่ยวข้องขึ้นอยู่กับการดำเนินการที่เกี่ยวข้อง ผู้ใช้หลายคนที่อ่านข้อมูลสามารถแชร์ข้อมูลได้โดยการล็อกการแชร์เพื่อป้องกันการเข้าถึงพร้อมกันโดยผู้เขียน (ซึ่งต้องการการล็อกแบบพิเศษ) ธุรกรรมหลายรายการสามารถ
ได้รับการล็อกการแชร์ในทรัพยากรเดียวกัน