Node.js จริง ๆ แล้วเพิ่มความยืดหยุ่นหรือไม่?


21

ฉันได้อ่านเกี่ยวกับปัญหา C10K แล้วและโดยเฉพาะอย่างยิ่งบันทึกย่อนั้นเป็นส่วนที่อ้างอิงถึงเซิร์ฟเวอร์ I / O อะซิงโครนัส http://www.kegel.com/c10k.html#aio

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

ซึ่งหมายความว่าเธรดจะมีซ็อคเก็ต 'พร้อมใช้งาน' มากขึ้นและสำหรับผู้ใช้บนเซิร์ฟเวอร์

จากนั้นฉันก็พบสิ่งนี้: http://teddziuba.com/2011/10/straight-talk-on-event-loops.html

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

ฉันเป็น coder ที่ตรงไปตรงมาไม่ใช่ผู้ดูแลเซิร์ฟเวอร์หรืออะไรแบบนั้น ฉันแค่สนใจที่จะรู้ว่า: Node.js เป็นของขวัญจากเทพเจ้าแห่ง 'คลาวด์คอมพิวติ้ง' หรือเป็นอากาศร้อนและไม่ช่วยประหยัดเวลาและ / หรือเงินของ บริษัท โดยการปรับปรุงความสามารถในการขยาย

ขอบคุณมาก.


12
ประการแรกเท็ดคือการหมุนรอบ, ประการที่สอง node.js มีความหมายสำหรับแอปพลิเคชันที่ผูกไว้กับ IO ไม่ใช่แอปพลิเคชันที่ผูกกับ CPU สิ่งที่คุณต้องการคือการรวมกันของทั้งสอง สิ่งใดที่ CPU ผูกไว้จะเข้าสู่กระบวนการ / เธรดใหม่ สิ่งใดที่ผูกไว้กับ IO จะไปในเหตุการณ์วนรอบ
Raynos

1
+! ผู้ชายคนนั้นเป็นโทรลล์แน่นอน
Patrick Hughes

มันขึ้นอยู่กับสิ่งที่คุณเปรียบเทียบ - ถ้าคุณยังใช้ Apache (ด้วยเหตุผลบางอย่าง) - แล้ว Node เป็นของขวัญจากเทพเจ้า แต่ถ้าคุณเปรียบเทียบกับ Nginx - การปรับปรุงมีความรุนแรงน้อยกว่าและ Node ก็ช้าลง (ช้ากว่าสิบเท่า, 2ms เทียบกับ 20ms เพื่อสร้างการตอบกลับ, แต่ในการทดสอบของเรา, Nginx ให้ 504 ภายใต้ภาระหนักปานกลาง, และ Node ให้การตอบสนองปกติ)
c69

ตอนนี้คุณพูดถึงพวกมันคนโทรลล์นั้นเป็นพวกหมุนรอบอย่างชัดเจน @ c69 เป็นข้อมูลที่ดีขอบคุณมาก
อเล็กซ์

ลิงก์ "การพูดคุยเหตุการณ์ลูป" ของคุณไม่ทำงานอีกต่อไป
Robert Harvey

คำตอบ:


20

แน่นอนว่าการทำงานของ CPU ที่เชื่อมโยงกันจะใช้ซีพียู มันจะบล็อกซีพียูในภาษาใด ๆ หรือกรอบที่คุณเขียนไว้

Node.js นั้นยอดเยี่ยมสำหรับเมื่อคุณมี I / O bound work ไม่ใช่ CPU ผูก ฉันจะไม่ยกของหนักใน Node แม้ว่ามันจะสามารถทำได้ Node.js แก้จริงปัญหาไม่ได้คนสวมหรือคิดเช่นเซิร์ฟเวอร์ fibonacci จำนวน ไม่ใช่ "อากาศร้อน"


เพียงตรวจสอบมาตรฐานและแน่นอนมันดูเหมือนจะเร็วกว่าในการแสดงหน้าเว็บ: zgadzaj.com/… .. ฉันเดาว่านี่คือสิ่งที่ฉันเป็นหลังจาก ...
Alex

3
@AlexW: จุดที่ดีเกี่ยวกับการวัดประสิทธิภาพเหล่านี้คือการที่คุณให้บริการเนื้อหาแบบคงที่ ดูเพลงฮิตต่อวันของฉัน การหมุนล่าม PHP สำหรับสิ่งที่เสียไป ดูสิ่งที่ต้องการโหนดคงที่สำหรับการให้บริการไดเรกทอรีไฟล์
Josh K

@AlexW เพียงเพื่อเตือนว่าzgadzaj.com/…ใช้ node.js 0.1.103 ซึ่งเก่าแล้วตอนนี้ !!
Samyak Bhuta

4

ในขณะที่กระดาษ C10K ค่อนข้างล้าสมัยเกี่ยวกับรายละเอียดการนำไปใช้งานการทำงานพร้อมกันตามเหตุการณ์ (แบบจำลองของเครื่องปฏิกรณ์) ยังคงเป็นวิธีที่เหนือกว่าการกำหนดเวลาไว้ล่วงหน้า ตัวอย่างเช่นโมเดลการกำหนดตารางเวลาไว้ล่วงหน้าอาจกำหนดเวลาเธรดขณะที่ถูกบล็อก IO สิ่งนี้ทำให้โหนด (และเครื่องมืออื่น ๆ เช่น Ruby's Event Machine และ Python Twisted) ใช้วงจรที่มีอยู่ได้ดีขึ้นโดยใช้เวลามากขึ้นในการทำงานจริงและลดเวลาในการบล็อก


-1

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


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

ประโยชน์หลักของ node.js คือการมีภาษาเดียวสำหรับส่วนหน้าและส่วนหลัง การอ้างสิทธิ์อื่น ๆ ทั้งหมดเป็นเพียงขุยเพื่อให้ดูเหมือนสำคัญกว่า
whatsisname

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