מה ההבדל בין ארכיטקטורת מונעת האירועים של Node.js לתכנות מרובת חוטים בשפות אחרות?


תשובה 1:

הן בפרדיגמה מונעת-אירועים והן בפרדיגמה הרבת הברגה, הקוד פועל בתהליך של מערכת הפעלה.

כאשר התהליך מריץ מספר חוטים, האשכולות האלה חולקים את זיכרון התהליך (שטח כתובת) הן לקריאה והן לכתיבה.

JavaScript המפעיל את Node.js הוא חד-הליכי על ידי עיצוב. כל פונקציה מובטחת לרוץ לסיומה, ואף קוד JavaScript אחר בתהליך הנוכחי לא יפעל במהלך אותה הפעלת פונקציה. האירועים האסינכרוניים באופן טבעי (רשת, פלט קלט דיסק, טיימרים, אירועי חומרה ומערכת הפעלה אחרים) מטופלים על ידי המנוע שמוסיף את פונקציות ה- JavaScript הרשומות כמטפלים (או התקשרות חוזרת) לאירועים אלה לתור לולאת האירועים שיבוצע לאחר הפונקציות מול התור הסתיימו.

בפרדיגמה הרבת הברגה, שני חוטים או יותר מריצים קוד במקביל, כך שבמהלך הפעלה של פונקציה, פיסת קוד שונה עשויה לרוץ גם על ליבת מעבד שונה, אולי קריאה או כתיבה לאותם כתובות זיכרון. זה עלול לגרום למצב לא עקבי של הזיכרון, אלא אם כן קוד המנגנונים המיוחדים של מערכות הפעלה (פרימיטיבי סנכרון) משמשים לניהול הגישה לזיכרון המשותף.



תשובה 2:

זו שאלה טובה, "מה ההבדל בין ארכיטקטורת מונעת האירועים של Node.js לתכנות מרובת חוטים בשפות אחרות?".

אנחנו צריכים וצריכים לפרק את זה קצת.

  • הארכיטקטורה מונעת האירועים של הצומת.

ארכיטקטורה מונעת אירועים אינה בלעדית לצומת, למשל טורנדו (פייתון), Vertx (Java), Akka (Scala), ReactiveX (מספר שפות).

  • תכנות מרובת הברגה בשפות אחרות.

שים לב שג'אווה סקריפט, על ידי עיצוב, אינו תומך במספר חוטים. אם כי היא תומכת בעובדי רשת, אשר ככל הידוע לי יכולים לתפקד כחוטים.

לכן מונחה אירועים אינו ייחודי לצומת וניתן לעשות ריבוי השחלות ב- Node.

אז יכולות להיות כאן שתי שאלות: "מה ההבדל בין מונחה אירועים לעומת ריבוי חוטים", ו"מה ההבדל בין צומת לשפות אחרות (מסגרות) ". אני אתמקד בזה האחרון מכיוון שנדמה שזו כוונת השאלה.

אני אומר שהמייחד את Node הוא שהמחבר יצר אותו לצורך הימנעות מחסימה של IO בעת בניית יישומי אינטרנט. התרבות של קהילת הצומת היא להדגיש ולבנות על חוזק ה- IO שאינו חוסם. אתה לא תמצא יותר מדי ספריות של צד שלישי שמבצעות שיחות חסימות. כמפתח המשתמש ב- Node, סביר להניח שלא תיתקל בפעולות חסימה עדינות בקוד שלך. ואילו בשפות אחרות, מפתח תמים עשוי לבצע בטעות שיחות חסימת יעילות מאוד כמו קריאה מחיבור מסד נתונים.

מלבד זאת, עליכם לקרוא באמת על דגמים מרובים של "במקביל" ולהבין את היתרונות והחסרונות של כל אחד מהם. נקודות בונוס להערכה מדוע רב חוטים היה מקובל במשך זמן כה רב.



תשובה 3:

ההבדלים הרעיוניים די קלים לעטוף את הראש.

בארכיטקטורה מונעת אירועים, התוכנית שלך פועלת בלולאה חד-הברגה רציפה (אתה יכול לבצע כמה שרבים ברמת הברגה בצומת, אך אל תדאג לגבי זה ברגע זה). כאשר אירוע ירה, העבודה עומדת על ערימת השיחות שתטפל בה בפנאי התוכניות.

ארכיטקטורה מרובת-הברגה שולחת בדרך כלל פתיל חדש כאשר עליו לחכות לפעולה. אז אתה מתקשר למסד נתונים ומסתובב פתיל חדש שיבצע את כל הדברים שאתה צריך ויעשה את מה שאתה צריך כדי להסיק או להצטרף לחוט המקורי.

שתי השיטות הללו מועילות מאוד לדברים שונים. מונע אירועים הוא נהדר לממשק משתמש ושרתים מכיוון שהתכנית שלך לא יודעת מתי יקרה אפילו שוויון ולעיתים קרובות אירועים יתפרצו. ואילו השחלה נחוצה לעבודות כבדות חישוביות בהן אתה רוצה לפרק בעיה לחלקים קטנים בהרבה (או שאתה מתקרב לגבול הלולאה הבודדת שלך).