פרק 12: הכרות עם mod_perlיעילותקריאת ההקדמה ל mod_perl מפתה לחשוב שהיא דואגת באורך פלא לייעול התהליך. צריך להבין שהדרכים בהם mod_perl מהדר את קוד ה Perl שלכם ושומרת אותו, משתנים על פי הדרך בה השתמשו בה. לפני שנצלול לפרטים בפרק הבא, כדי שתקבלו קודם כל סקירה על הדרכים שבהם mod_perl יכולה לייעל את הרצת Perl. ייעול: "יותר טוב מכלום" אם הסקריפט שלכם לא אמור לרוץ תחת Apache::Registry, הורידו את המודול Apache::PerlRun. צורה פשוטה זו של ייעול תשאיר מהדר ל Perl אך ורק בשרת ה Apache, ותחסוך את הצורך ליילד (fork) מהדר Perl עבור כל ביצוע של סקריפט. החיסכון כאן הוא קטן, אבל עדין מהיר יותר מ forking נקי. ייעול: "בלי ידים" הסקריפט שלכם רץ תחת Apache::Registry, אבל אתם יותר מדי עסוקים/עצלנים/עייפים/רעבים מכדי לאמץ את סביבת העבודה לייעול נוסף. Mod_perl תצטרכו להדר הן את המודולים שלכם והן את הסקריפטים שלכם עבור כל תהליך בן של השרת. כאשר בקשה נמסרת לתהליך בן שעדין לא הספיק להפעיל את הסקריפט, הסקריפט והמודולים יצטרכו להיות מוהדרים מחדש. בקשות עוקבות שיטופלו ע"י הבן יוכלו להסתמך על הקוד שכבר הוהדר ונמצא בזיכרון. ייעול: "אופייני" הטענתם מראש את מודולי ה Perl ע"י הכללתם בהנחיות PerlModule או PerlRequire בקובץ ה Apache בשם httpd.conf . תהליך האב של Apache מכיל כעת בזיכרון את הקוד המוהדר עבור מודולים אלו. כאשר נוצר תהליך בן, הוא יורש את המודולים במצב מוהדר מראש, וצריך להדר רק את סקריפט הPerl עצמו, עבור כל תהליך. הסקריפט המוהדר נשמר עבור בקשות עתידיות שיטופלו ע"י בן זה. זהי בוודאי דרגת הייעול הנפוצה ביותר של mod_perl , כיוון שהיא מאזנת את גודל תהליך האב של Apache מול זמן ההידור. ייעול: "קיצוני אבל מנופח" ניתן לתת את כל קוד הPerl ל Apache ולהדר אותו בתוך תהליך האב. לכל ילד לא יהיה שום קוד להדר, כיוון שהוא ירש את כל הקוד במצב מוהדר מהאב. למרות שדרך זו היא המהירה ביותר בתיאוריה, היא דורשת את כמות הזיכרון הגדולה ביותר, כיוון שכל תהליך בן מכיל קוד מוהדר שאולי לא יצטרך, תלוי בכמה סקריפטים האתר משתמש. בוחן הביצועים מצביע שהזמן שנחסך כאן לעומת הזמן בייעול "אופייני" לא שווה בדרך כלל את בצריכת הזכרון המוגברת, אבל כמובן שיש יוצאים מן הכלל שירויחו משיטה זו. מקורות נוספים:
נתחיל
לכתוב את הקוד
|