การร้องขอถูก集中ที่กระบวนการบางอย่าง

ปรากฏการณ์

บางครั้งเราสามารถเห็นได้จากคำสั่ง php start.php status ว่าการร้องขอถูกจัดการโดยกระบวนการเฉพาะบางอย่าง ในขณะที่กระบวนการอื่นๆ ไม่ทำงานเลย

กลไกการแย่งชิง

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

กลไกการทำงานแบบวนซ้ำ

Workerman สามารถเปลี่ยนวิธีการรับการเชื่อมต่อให้เป็นแบบ วนซ้ำ โดยการตั้งค่า $worker->reusePort = true; ในวิธีการวนซ้ำ เคอร์เนลจะทำการแจกจ่ายการเชื่อมต่อในลักษณะที่ใกล้เคียงกับค่าเฉลี่ยให้กับกระบวนการทั้งหมด ทำให้กระบวนการทั้งหมดจะร่วมกันจัดการกับการร้องขอ

ความเข้าใจผิด

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