כמה עוד 19.01.2020:06

שאלה לגבי NodeJS ופעולות עיבוד כבדות

ערכתי לאחרונה בתאריך 19.01.20 בשעה 20:20 בברכה, כמה עוד

שאלה שמעניינת אותי לגבי NodeJS.

אומרים שNode היא פלטפורמה פחות טובה לפיתוח צד שרת כשצריך להתעסק עם פעולות כבדות. כמו לדוגמא עיבוד/הקטנת תמונה.
אני מבין שה- event loop מנוהל על ידי thread אחד.
אבל בפועל אני שולח פעולה בצורת async, ואת הפעולה מבצעת ספרייה שהיא כן multi threaded וכתובה לצורך פעולה מקבילית. אז איפה פה הבעיה?

תודה אלון
מקווה שהייתי ברור
CaTz 22.01.2000:03
1. אתה צודק, בתגובה להודעה מספר 0
אין בעיה עם פעולה אסינכרונית, הרי שהיא נכנסת לתור, ומפנה את הevent loop לבצע משימה הבאה.

הבעיה מתחילה כשאתה עושה פעולה כבדה בתוך הה event loop. כיוון שנוד הוא עם thread יחיד, זה תוקע אותו ולא מאפשר לשרת שלך לטפל בבקשות נוספות
inno3D 22.01.2001:53
2. אין בעיה. במערכת טובה אתה תשלח פעולות כבדות לשרת פייתון או java בתגובה להודעה מספר 0
והתשובה תחזור אסינכרונית
arielvol 21.02.2022:00
3. זאת טעות מאד נפוצה. הרבה אנשים חושבים ש NODE הוא SINGLE THREADED בתגובה להודעה מספר 0
אבל הוא ממש לא.
קצת קריאה מעמיקה ואתה מבין שבעצם הוא ממש לא SINGLE THREADED.
NODE JS בנוי מתחת ל"מנוע" עם V8 שהEVENT LOOP שלו הוא באמת SINGLE THREADED
אבל הוא גם מורכב מספריית C\C++ בשם LIBUV שהיא למעשה בהחלט MULTI THREADED.
הרבה מהפעולות שאנחנו עושים ב NODE , כגון פעולות אסיכרוניות לרשת הן מועברות לספריית LIBUV שלמעשה מטפלת בהן ב THREAD אחר.

הבעיה שהעיקרית היא שאם אתה מנסה לעשות (כמו שנאמר פה מעל) פעולה שצורך זמן CPU מתוך ה EVENT LOOP , אז אתה בבעיה כי אתה תוקע את כל NODE JS.
כמובן יש לזה פתרונות שונים כמו WORKERS ועוד..

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