มันขึ้นอยู่กับว่าคุณนิยามภาวะพร้อมกันได้อย่างไร
ในซอฟต์แวร์ฝั่งเซิร์ฟเวอร์การเกิดพร้อมกันและการขนานมักถูกพิจารณาว่าเป็นแนวคิดที่แตกต่างกัน ในเซิร์ฟเวอร์การสนับสนุน I / Os ที่เกิดขึ้นพร้อมกันหมายความว่าเซิร์ฟเวอร์สามารถให้บริการลูกค้าหลายรายโดยการดำเนินการหลาย ๆ กระแสที่สอดคล้องกับลูกค้าเหล่านั้นด้วยหน่วยการคำนวณเพียงหน่วยเดียว ในบริบทนี้การขนานจะหมายถึงเซิร์ฟเวอร์สามารถดำเนินการหลายอย่างในเวลาเดียวกัน (ด้วยหน่วยการคำนวณหลายหน่วย) ซึ่งแตกต่างกัน
ตัวอย่างเช่นบาร์เทนเดอร์สามารถดูแลลูกค้าหลายรายในขณะที่เขาสามารถเตรียมเครื่องดื่มได้ครั้งละหนึ่งเครื่องเท่านั้น ดังนั้นเขาสามารถให้เห็นพ้องด้วยกันโดยไม่ขนานกัน
คำถามนี้มีการถกเถียงกันที่นี่:
อะไรคือความแตกต่างระหว่างการเกิดพร้อมกันและการขนาน
ดูเพิ่มเติมการนำเสนอนี้จาก Rob Pike
โปรแกรมแบบเธรดเดียวสามารถให้การพร้อมกันที่ระดับ I / O ได้อย่างแน่นอนโดยใช้กลไกมัลติเพล็กซิ่ง I / O (de) และห่วงเหตุการณ์ (ซึ่งเป็นสิ่งที่ Redis ทำ)
Parallelism มีค่าใช้จ่าย: ด้วยซ็อกเก็ตหลายตัว / หลายคอร์ที่คุณสามารถหาได้บนฮาร์ดแวร์ที่ทันสมัยการซิงโครไนซ์ระหว่างเธรดมีราคาแพงมาก ในทางกลับกันคอขวดของเอ็นจิ้นการจัดเก็บข้อมูลที่มีประสิทธิภาพอย่างเรดดิสมักจะเป็นเครือข่ายอย่างมากก่อนซีพียู เหตุการณ์ลูปที่แยกกัน (ซึ่งไม่ต้องการการซิงโครไนซ์) จึงถูกมองว่าเป็นการออกแบบที่ดีเพื่อสร้างเซิร์ฟเวอร์ที่มีประสิทธิภาพปรับขนาดได้
ความจริงที่ว่าการดำเนินการ Redis เป็นอะตอมเป็นเพียงผลมาจากเหตุการณ์วนรอบเธรดเดียว จุดที่น่าสนใจคืออะตอมมิกซิตีไม่มีค่าใช้จ่ายเพิ่มเติม (ไม่จำเป็นต้องประสานข้อมูล) ผู้ใช้สามารถใช้ประโยชน์จากการล็อคในแง่ดีและรูปแบบอื่น ๆ โดยไม่ต้องจ่ายค่าใช้จ่ายในการประสาน