มีจำนวนของมีโมดูล MPM (Multi-ประมวลผลโมดูล) แต่ไกลโดยส่วนใหญ่ใช้ (อย่างน้อยบนแพลตฟอร์มระวัง *) มีสามคนหลักอย่างแพร่หลายprefork
, และworker
event
โดยพื้นฐานแล้วมันแสดงถึงวิวัฒนาการของเว็บเซิร์ฟเวอร์ Apache และวิธีต่างๆที่เซิร์ฟเวอร์สร้างขึ้นเพื่อจัดการคำขอ HTTP ภายในข้อ จำกัด ด้านการคำนวณของเวลาในประวัติศาสตร์ (ในแง่ของซอฟต์แวร์) ที่ยาวนาน
mpm_prefork
.. เป็นอย่างดี .. มันเข้ากันได้กับทุกสิ่ง มันหมุนออกจำนวนกระบวนการเด็กสำหรับการให้บริการตามคำขอและกระบวนการเด็กให้บริการเพียงหนึ่งการร้องขอในแต่ละครั้ง เนื่องจากมีกระบวนการเซิร์ฟเวอร์อยู่ที่นั่นพร้อมสำหรับการดำเนินการและไม่จำเป็นต้องจัดการกับเธรด marshaling จึงเร็วกว่า MPM เธรดที่ทันสมัยกว่าเมื่อคุณจัดการกับคำร้องขอครั้งเดียวเท่านั้น เนื่องจากพวกเขากำลังรอให้อยู่ในสายจนกว่ากระบวนการเซิร์ฟเวอร์จะให้บริการฟรี นอกจากนี้การพยายามเพิ่มจำนวนเด็กที่ทำกระบวนการ prefork คุณจะสามารถดูด RAM ที่ร้ายแรงบางตัวได้อย่างง่ายดาย
อาจไม่แนะนำให้ใช้ prefork จนกว่าคุณจะต้องการโมดูลที่ไม่ปลอดภัยสำหรับเธรด
ใช้ในกรณีที่:mod_php
คุณจำเป็นต้องมีโมดูลที่ทำลายเมื่อหัวข้อถูกนำมาใช้เช่น แล้วถึงแม้พิจารณาใช้ FastCGI php-fpm
และ
อย่าใช้ถ้า:โมดูลของคุณจะไม่หยุดในการทำเกลียว
mpm_worker
ใช้เธรด - ซึ่งเป็นความช่วยเหลือที่ยิ่งใหญ่สำหรับการทำงานพร้อมกัน ผู้ปฏิบัติงานหมุนกระบวนการลูกบางอย่างซึ่งจะหมุนกระทู้เด็ก; คล้ายกับ prefork, เธรดสำรองบางส่วนจะถูกเก็บไว้พร้อมถ้าเป็นไปได้, เพื่อให้บริการการเชื่อมต่อ วิธีนี้ดีกว่า RAM มากเนื่องจากการนับเธรดไม่ได้มีผลกระทบโดยตรงต่อการใช้หน่วยความจำเหมือนกับการนับเซิร์ฟเวอร์ใน prefork นอกจากนี้ยังจัดการการทำงานพร้อมกันได้ง่ายขึ้นเนื่องจากการเชื่อมต่อเพียงแค่ต้องรอเธรดฟรี (ซึ่งโดยปกติจะมีให้) แทนเซิร์ฟเวอร์สำรองใน prefork
ใช้ถ้า:คุณใช้ Apache 2.2 หรือ 2.4 และคุณใช้ SSL เป็นหลัก
อย่าใช้ถ้า:คุณไม่สามารถผิดพลาดได้เว้นแต่คุณจะต้องการ prefork เพื่อความเข้ากันได้
อย่างไรก็ตามโปรดทราบว่าดอกยางเชื่อมต่อกับการเชื่อมต่อไม่ใช่คำขอซึ่งหมายความว่าการเชื่อมต่อแบบ keep-alive จะเก็บเธรดไว้เสมอจนกว่าจะปิด (ซึ่งอาจใช้เวลานานขึ้นอยู่กับการกำหนดค่าของคุณ) นี่คือเหตุผลที่เรามี ..
mpm_event
มีลักษณะคล้ายกันมากกับคนงานโครงสร้าง มันเพิ่งถูกย้ายจากสถานะ 'ทดสอบ' เป็น 'มั่นคง' ใน Apache 2.4 ข้อแตกต่างที่สำคัญคือจะใช้เธรดเฉพาะเพื่อจัดการกับการเชื่อมต่อที่เก็บไว้และส่งคำขอไปยังเธรดรองเฉพาะเมื่อมีการร้องขอจริง (อนุญาตให้เธรดเหล่านั้นว่างในทันทีหลังจากการร้องขอเสร็จสมบูรณ์) นี่เป็นสิ่งที่ยอดเยี่ยมสำหรับการทำงานพร้อมกันของลูกค้าที่ไม่จำเป็นต้องทำงานพร้อมกันทั้งหมด แต่ทำการร้องขอเป็นครั้งคราวและเมื่อลูกค้าอาจหมดเวลาใช้งานที่ยาวนาน
ข้อยกเว้นที่นี่คือการเชื่อมต่อ SSL; ในกรณีนั้นมันจะทำงานเหมือนกันกับคนงาน (ติดการเชื่อมต่อที่กำหนดไปยังเธรดที่กำหนดจนกว่าการเชื่อมต่อจะปิด)
ใช้ถ้า:คุณใช้ Apache 2.4 และชอบชุดข้อความ แต่คุณไม่ชอบให้มีชุดข้อความรอการเชื่อมต่อที่ไม่ได้ใช้งาน ทุกคนชอบกระทู้!
อย่าใช้ถ้า:คุณไม่ได้อยู่ใน Apache 2.4 หรือคุณต้องการ prefork เพื่อความเข้ากันได้
ในโลกปัจจุบันของslowloris , AJAX และเบราว์เซอร์ที่ต้องการเชื่อมต่อ TCP แบบมัลติเพล็กซ์ 6 (ด้วยการคงไว้ซึ่งความแน่นอน) ไปยังเซิร์ฟเวอร์ของคุณการทำงานพร้อมกันเป็นปัจจัยสำคัญในการทำให้เซิร์ฟเวอร์ของคุณขยายขนาด ประวัติของ Apache ได้ผูกมันไว้ในเรื่องนี้และในขณะที่มันยังไม่ถึงกับชอบของ nginx หรือ lighttpd ในแง่ของการใช้ทรัพยากรหรือขนาดมันชัดเจนว่าทีมพัฒนากำลังทำงานเพื่อสร้างเว็บเซิร์ฟเวอร์ที่เกี่ยวข้อง ในโลกที่มีคำขอพร้อมกันสูงในทุกวันนี้