תקשורת בין־תהליכית - הדרכה#
לשני תכניות שצריכות לתקשר יש מספר ערוצים לבחירה: pipe, FIFO בעל שם על הדיסק, סוקט מעל הרשת, זוג סוקטים בזיכרון, או נתח של זיכרון משותף של System V. הדרכה זו היא ספר מתכונים. כל עמוד מגיש לכם תכנית שלמה הניתנת להרצה - יצרן וצרכן, או לקוח ושרת - שתוכלו להעתיק, להריץ ולהתאים.
המנגנון של כל ערוץ - מה socket מחזיר, כיצד fork מפצל תהליך, מה %SIG עושה - כבר מתועד בהפניה לכל פונקציה מובנית ובפרק האותות. הדרכה זו אינה חוזרת עליהם. היא מרכיבה אותם לכדי תכניות IPC עובדות ומקשרת כל קריאה בחזרה לעמוד ההפניה שלה.
PetaPerl רץ רק על Linux, ולכן הכל כאן הוא POSIX. אין IPC של Win32, אין חלופת named-pipe-on-Windows, אין Win32::Process. המתכונים משתמשים בקריאות המערכת שגרעין Linux אכן מספק.
בחירת ערוץ#
בחרו את הערוץ הקל ביותר שנושא את מה שאתם צריכים:
ילד שמריץ פקודה - אתם רוצים את הפלט של
sortאו את הקלט שלgzip. השתמשו ב־pipe open, או ב־IPC::Open2/IPC::Open3כשאתם צריכים את שני הכיוונים. ראו תהליכי משנה ותהליכים נלווים.שני תהליכים קשורים, מכונה אחת - הורה וילד שזה עתה fork אותו, החולקים זרם בתים. השתמשו ב־
pipeאו ב־socketpair. ראו תהליכי משנה ו־סוקטים בתחום UNIX ו־UDP.תהליכים בלתי־קשורים, מכונה אחת - שתי תכניות שהופעלו באופן עצמאי ונפגשות בנתיב ידוע. השתמשו ב־FIFO או בסוקט בתחום UNIX. ראו FIFOs ו־סוקטים בתחום UNIX ו־UDP.
תהליכים על מכונות שונות - לקוח ושרת ברשת. השתמשו בסוקט TCP. ראו סוקטי TCP.
datagram, שגר־ושכח - ללא חיבור, עם שמירה על גבולות ההודעות. השתמשו בסוקט UDP. ראו סוקטים בתחום UNIX ו־UDP.
מונה משותף או buffer ללא העתקה - סמפורים וזיכרון משותף של System V. השתמשו ב־
semgetוב־shmget. ראו System V IPC.
כיצד הדרכה זו מאורגנת#
כל עמוד עומד בפני עצמו. קראו את זה שעונה על שאלתכם.
תהליכי משנה ותהליכים נלווים - הרצת פקודה ותקשורת איתה, בכיוון אחד או בשניהם, עם ה־pipe open ועם
IPC::Open2/IPC::Open3.FIFOs - named pipe על מערכת הקבצים שמאפשר לשתי תכניות בלתי־קשורות להיפגש בנתיב.
סוקטי TCP - לקוח שלם ושרת echo עם fork מעל ממשק ה־loopback.
סוקטים בתחום UNIX ו־UDP - סוקטי זרם מקומיים באמצעות
socketpair, ו־datagrams של UDP ללא חיבור.System V IPC - סמפורים וזיכרון משותף עם הפונקציות המובנות הגולמיות
semget/shmget.
מה הדרכה זו אינה מכסה#
אותות כמנגנון תיאום מעבר ליסודות. שליחת אות עם
killותפיסתו דרך%SIGמכוסה במקום שבו כל מתכון צריך זאת; טבלת ההיערכות המלאה לאותות נמצאת בהפניה%SIG.מקביליות בתוך תהליך. הרצת עבודה על פני ליבות CPU בתוך תכנית יחידה היא הקבלה אוטומטית, נושא אחר. ראו את המדריך ביצוע מקבילי.
מודולי רשת ברמה גבוהה. הדרכה זו נשארת בשכבת ה־
socketהמובנית כדי שהמנגנון יהיה גלוי. המתכונים הם הבסיס שעליו עוטף ברמה גבוהה יותר היה נבנה.