Cinismul în ea apache2 prefork vs lucrător
Destul de mult timp atunci când instalați serverul de web Apache, m-am îndoit dacă am pus apache2-lucrător sau apache2-prefork, și că a venit timpul, când pentru a elimina orice ambiguitate în selectarea și în mod clar descrie cum și când să-l folosească.
Documentația oficială serverul spune următoarele:
Alegerea unui MPM
2.x Apache sprijină modelele conectabile, numite concurenta Multi-Processing Module (MPMS). La construirea Apache, trebuie să alegeți un MPM de a utiliza. Există MPMS specifice platformei pentru unele platforme: BeOS, mpm_netware, mpmt_os2 și mpm_winnt. Pentru sistemele generale de tip Unix, există mai multe MPMS din care să aleagă. Alegerea MPM poate afecta viteza si scalabilitatea httpd:
* Lucrătorul MPM folosește mai multe procese copil cu multe fire fiecare. Fiecare fir se ocupă de o conexiune la un moment dat. Lucrător în general, este o alegere bună pentru servere cu trafic mare, deoarece are o amprentă de memorie mai mică decât prefork MPM.
* MPM prefork utilizează mai multe procese copil cu un fir de fiecare. Fiecare proces se ocupă de o conexiune la un moment dat. Pe multe sisteme, prefork este comparabil în viteză la lucrător, dar folosește mai multă memorie. Design Threadless prefork are avantaje față de lucrător în unele situații: acesta poate fi utilizat cu module terțe părți fără fir în condiții de siguranță, și este mai ușor pentru a depana pe platforme cu suport slabă fir de depanare.
Pentru mai multe informații cu privire la aceste și alte MPMS, vă rugăm să consultați documentația MPM
Traduceți totul nu se angajează, în sensul că nu văd, dar voi încerca să descrie în câteva cuvinte, ceea ce face fiecare dintre aceste module.
Documentația explică faptul că serverul Apache2 multithreading este implementat prin intermediul plug-in-uri - MPM (despre traducere mă îndoiesc, dar, în opinia mea, este mai bine tradus ca „module multithread de prelucrare“, deși în continuare voi folosi abrevierea în minte voluminos al numelui) care sunt specifice platformei. Există două module de bază modele MPM - un muncitor MPM și prefork MPM.
Lucrător funcționează după cum urmează: - atunci când începe mai multe procese copil create de mai multe fire în fiecare (cum anume se înțelege prin „câteva“ este setat în fișierul de configurare Apache2). După cum este indicat un avantaj al acestui modul consum redus de memorie, comparativ cu modulul prefork. De asemenea, acest modul este recomandat pentru servere Web puternic încărcate.
Prefork creează, de asemenea, o serie de procese copil, dar în contrast cu Muncitorul, fiecare incluzând exact un fir. Ie fiecare proces tratează doar o singură conexiune. Despre viteza indică faptul că viteza de ambele module este mai mult sau mai puțin comparabile, dar prefork consumă mai multă memorie. Utilizarea bezpotochnogo modul prefork, de preferință, în cazul modulelor care nu au multithreading sigure. De asemenea, este recomandat să utilizați prefork pe platforme în cazul în care cererile de depanare multithreaded nu sunt puse în aplicare la nivelul corespunzător (de altfel, aplicații de depanare multithreaded chiar și cu un sistem de suport bun al acestuia - nu simplu).
În concluzie, aș dori să adaug că nu există nici o alegere lipsită de ambiguitate, toate determinate pentru a rezolva problemele, dar trebuie amintit că modelul prefork (care, de altfel, a fost singurul model care susține serverul Apache 1.3) este cunoscut a fi mai stabil, ca eșec într-un singur proces nu afectează alte procese, iar în eșecul Worker caz într-un singur flux poate incapacitarea mai multe fluxuri adiacente, deși Worker prezintă o viteză mai mare într-o anumită gamă de aplicații (în special de server foarte încărcat).
Acum vom încerca să efectueze teste, cum să lucreze configurațiile mod_fcgi PHP Apache + prefork si de munca.