פורסם: 03/11/2013 - 10:23
נושא ההודעה: Node.js
|
אם יש לכם מה לכתוב על Node.js, נא לכתוב את זה כאן ולא בפתיל שאולי ימחק.
|
|
חזרה לתוכן הדיון |
פורסם: 03/11/2013 - 11:24
נושא ההודעה:
|
נדמה לי שהסרטון הזה הפיל לי האסימון לגבי הזיפת החדש שהוכנס ל- yahoo mail , ושאילץ אותי לבטל javascript עם התוסף Noscript.
האם הבנתי נכון?
|
|
חזרה לתוכן הדיון |
פורסם: 03/11/2013 - 11:32
נושא ההודעה:
|
מה הקשר? Node.js מריץ את קוד ה־ג'אווהסקריפט על השרת. הדפדפן שלך לא חייב לתמוך בג'אווהסקריפט.
|
|
חזרה לתוכן הדיון |
פורסם: 03/11/2013 - 11:38
נושא ההודעה:
|
אז מה זה הזיפת החדש שהוכנס ליאהו? אין קשר Node.js?
|
|
חזרה לתוכן הדיון |
פורסם: 03/11/2013 - 13:20
נושא ההודעה:
|
node.js מונע שימוש בג'אווהסקריפט רק באתרים גרמניים, ואילו דואר יאהו הוא אתר אמריקאי.
|
|
חזרה לתוכן הדיון |
פורסם: 03/11/2013 - 20:34
נושא ההודעה:
|
צפריר : | node.js מונע שימוש בג'אווהסקריפט רק באתרים גרמניים, ואילו דואר יאהו הוא אתר אמריקאי. |
הגיוני.
|
|
חזרה לתוכן הדיון |
פורסם: 03/11/2013 - 21:23
נושא ההודעה:
|
elcuco : | צפריר : | node.js מונע שימוש בג'אווהסקריפט רק באתרים גרמניים, ואילו דואר יאהו הוא אתר אמריקאי. |
הגיוני. |
לפי המאמר לא רק אתרים גרמנים, גם חלק מרומניה ואסטוניה.
|
|
חזרה לתוכן הדיון |
פורסם: 03/11/2013 - 22:28
נושא ההודעה:
|
איזה מאמר?
ניסיתי למצוא אותו פה...
ד"א, הסרטון שמבקר node.js הוא טיפשי כמו בן-אדם שיצר אותו...
_________________ Computers are incredibly fast, accurate and stupid. Human beings are incredibly slow, inaccurate and brilliant. Together they are powerful beyond imagination.
unknown --
|
|
חזרה לתוכן הדיון |
פורסם: 03/11/2013 - 22:53
נושא ההודעה:
|
confiq : | איזה מאמר?
ניסיתי למצוא אותו פה...
ד"א, הסרטון שמבקר node.js הוא טיפשי כמו בן-אדם שיצר אותו... |
זה כי אתה טועה לחלוטין. הינה הוכחה מוצקת לכך שגם אתה, גם node.js מפגרים.
http://www.youtube.com/watch?v=bzkRVzciAZg
לינוס צודק, ו־node.js מסובב את אפאצ'י על האצבע. כי זה נתן לי שליטה אסינכרונית על המחשב, ואפאצ'י זה דבר איטי, כי הוא סינכרוני. איטי כמו כלב. non-blocking זה הסוד שבעזרתו אתה עושה תוכנות מהר - ובלעדיו אתה כותב איטי.
|
|
חזרה לתוכן הדיון |
פורסם: 03/11/2013 - 23:15
נושא ההודעה:
|
זה טעות נפוצה, async לא אומר בהכרח מהירות גבוהה אלא concurrency גבוה.
כמובן ש-node לא המציאה את הגלגל, בפייתון יש twisted ו-tornado, ברובי (ושפות נוספות) יש את EventMachine וכו'.
|
|
חזרה לתוכן הדיון |
פורסם: 03/11/2013 - 23:18
נושא ההודעה:
|
elcuco : | confiq : | איזה מאמר?
ניסיתי למצוא אותו פה...
ד"א, הסרטון שמבקר node.js הוא טיפשי כמו בן-אדם שיצר אותו... |
זה כי אתה טועה לחלוטין. הינה הוכחה מוצקת לכך שגם אתה, גם node.js מפגרים.
http://www.youtube.com/watch?v=bzkRVzciAZg
לינוס צודק, ו־node.js מסובב את אפאצ'י על האצבע. כי זה נתן לי שליטה אסינכרונית על המחשב, ואפאצ'י זה דבר איטי, כי הוא סינכרוני. איטי כמו כלב. non-blocking זה הסוד שבעזרתו אתה עושה תוכנות מהר - ובלעדיו אתה כותב איטי. |
לא יודע בדיוק איך זה הגיע הסיפור הזה של non-blocking אבל אם אני מבין נכון זה בדיוק להיפך. כלומר אם אתה עושה פעולה שתוקעת את ה- event loop אתה תוקע את כל שאר ה- events (למשל אם אתה עושה פעולה IO שלוקחת הרבה זמן). לעומת זאת שרת שמבוסס על threading יכול לעשות את זה ב- thread אחר ולא לתקוע את כל שאר הבקשות.
בקיצור (אלא אם לא הבנתי משהו) זה הפוך שרת מבוסס threads הוא non-blocking. אבל זה נכון גם לכל שאר השרתי שעובדים ככה למשל מישהו הזכיר פה טורנדו שמבוסס פיתון, אותה בעיה
http://stackoverflow.com/questions/3638844/is-tornado-really-non-blocking
אם אני לא טועה זה ככה עובד גם ב- rails.
|
|
חזרה לתוכן הדיון |
פורסם: 03/11/2013 - 23:22
נושא ההודעה:
|
ומה זה בדיוק אומר concurrency גבוה?
|
|
חזרה לתוכן הדיון |
פורסם: 03/11/2013 - 23:23
נושא ההודעה:
|
אני כנראה לא מבין את סרקזם שלך...
הסרטון של הבחור קצת מוגזם. קודם כל js יכול להיות יותר מהיר משפות סקריפטיות אחרות בהרבה.
הוא יכול להיות יותר מהיר java EE וnode.js יכול להיות יותר מהיר מאפצ'י.
זו לא שפה שכדאי לזלזל בה כמו בחור החמוד.
_________________ Computers are incredibly fast, accurate and stupid. Human beings are incredibly slow, inaccurate and brilliant. Together they are powerful beyond imagination.
unknown --
|
|
חזרה לתוכן הדיון |
פורסם: 03/11/2013 - 23:27
נושא ההודעה:
|
threads ו-non-blocking async או concurrency זה לא בדיוק אותו הדבר, אולי ההרצאה הבאה תעזור לך להבין:
http://vimeo.com/49718712
גם לגבי השאלה שהדבקת - הוא לא עבד נכון, יש מספר דרכים לעשות זאת לדוגמא: ל-psycopg יש תמיכה מובנית ב-async, יש את txpostgres, txmongo וכו', עבור tornado יש את mongotor, asyncmongo ו-Motor וכן הלאה.
|
|
חזרה לתוכן הדיון |
פורסם: 03/11/2013 - 23:36
נושא ההודעה:
|
mksoft : | threads ו-non-blocking async או concurrency זה לא בדיוק אותו הדבר, אולי ההרצאה הבאה תעזור לך להבין:
http://vimeo.com/49718712
גם לגבי השאלה שהדבקת - הוא לא עבד נכון, יש מספר דרכים לעשות זאת לדוגמא: ל-psycopg יש תמיכה מובנית ב-async, יש את txpostgres, txmongo וכו', עבור tornado יש את mongotor, asyncmongo ו-Motor וכן הלאה. |
בנוסף concurrency לא מדבר על מהירות, יכול להיות איטי הרבה יותר, זה רק אומר מימוש חישוב בתדירות גבוהה יותר, אבל אפילו לא בהכרח בו זמנית. ויש לזה מחיר בהתאם לצורת המימוש, כאשר העיקרי בניהם זה עודף סיבוכיות של הקוד שלך.
בנוסף השאלה של האם אתה משתמש בהרבה מעבדים (כלומר הרבה פרוססים), או האם אתה עובד עם טרדים (כיום מובנה גם במעבדים) אבל פרוסס בודד ?
כאשר יש פעולה שלוקחת הרבה זמן, גם לזה יש פתרונות שונים, אבל Concurrency גם צריך לחכות לפעולות ארוכות אם צריך שהוא יחכה, ככה שהוא לא חוסך כלום בזה, הוא רק אומר שכל עוד מחכים לפעולה הזו אפשר לעשות עוד פעולות, אבל מה קורה כאשר הפעולה הארוכה חייבת להתבצע לפני שאר הפעולות ?
לפעמים זה רק מסבך את העבודה. לא כל דבר דורש את הגישה הזו, צריך לדעת להתאים את עצמך למה שאתה צריך לפתור.
הסיבה שמשתמשים למשל בnode.js, הוא לספק מענה להרבה מאוד בקשות בו זמנית. ברגע שצריך לבצע פעולות ארוכות יותר, בד"כ מוציאים את זה למשהו חיצוני יותר.
0.2 סנט שלי בנושא.
|
|
חזרה לתוכן הדיון |
פורסם: 03/11/2013 - 23:43
נושא ההודעה:
|
ציטוט: |
כאשר יש פעולה שלוקחת הרבה זמן, גם לזה יש פתרונות שונים, אבל Concurrency גם צריך לחכות לפעולות ארוכות אם צריך שהוא יחכה, ככה שהוא לא חוסך כלום בזה, הוא רק אומר שכל עוד מחכים לפעולה הזו אפשר לעשות עוד פעולות, אבל מה קורה כאשר הפעולה הארוכה חייבת להתבצע לפני שאר הפעולות ?
|
זה בדיוק הענין לא כל דבר ניתן לעשות בצורה אסינכרונית. לעומת זאת בשימוש ב- threading אתה יכול לעשות הכל בצורה אסינכרונית (וגם מקבילה). נניח למשל שאני רוצה להזרים קובץ מדיה גדול דרך השרת שלי בכל מקרה השרת non-blocking שלי יתקע את כל שאר הבקשות (אפילו שאף אחת מהן לא ממש קשורה להזרמה של הקובץ). בקיצור זה טוב במצבים מאוד מסויימים.
|
|
חזרה לתוכן הדיון |
פורסם: 03/11/2013 - 23:56
נושא ההודעה:
|
זה לא מדוייק, ב-node לדוגמא משתמשים ב-streams, ה-event loop לא חסום.
threads לא כל כך מתאימים לטיפול בבעיית C10K ומעלה ־ העלות שלהם גבוהה מאוד בהשוואה ל-event loop בודד (צריכת זכרון לדוגמא עבור stack של כל אחד מהם שלא קטן בברירת מחדל, סביר להניח שצריך לקסטם את max pids, max files, max user processes וכו').
שלא לדבר על כך ש-event loop מונע את כל החרא הכרוך בעבודה עם threads (סינכרוניזציה וכו') ־ במחיר של תכנות מסורבל כמובן ב-callbacks.
זו אחת הסיבות שאני פוזל לעבר Go, הצורה שהיא מטפלת בזה חוסכת את גועל ה-threads (כמו שהבנתם, אני לא אוהב אותם).
בכל מקרה, כדאי לצפות בהרצאה של רוב פייק שקישרתי למעלה, היא תסביר את ההבדל בצורה טובה.
|
|
חזרה לתוכן הדיון |
פורסם: 04/11/2013 - 08:13
נושא ההודעה:
|
2 : | ציטוט: |
כאשר יש פעולה שלוקחת הרבה זמן, גם לזה יש פתרונות שונים, אבל Concurrency גם צריך לחכות לפעולות ארוכות אם צריך שהוא יחכה, ככה שהוא לא חוסך כלום בזה, הוא רק אומר שכל עוד מחכים לפעולה הזו אפשר לעשות עוד פעולות, אבל מה קורה כאשר הפעולה הארוכה חייבת להתבצע לפני שאר הפעולות ?
|
זה בדיוק הענין לא כל דבר ניתן לעשות בצורה אסינכרונית. לעומת זאת בשימוש ב- threading אתה יכול לעשות הכל בצורה אסינכרונית (וגם מקבילה). נניח למשל שאני רוצה להזרים קובץ מדיה גדול דרך השרת שלי בכל מקרה השרת non-blocking שלי יתקע את כל שאר הבקשות (אפילו שאף אחת מהן לא ממש קשורה להזרמה של הקובץ). בקיצור זה טוב במצבים מאוד מסויימים. |
להפך: לולאת אירועים עובדת היטב בדיוק במקרים דומים לאילו שתיארת: כשיש פעולות קלט/פלט. מה שיכול לתקוע אותה היא שימוש במשאב המוגבל שלה: המעבד.
כאשר הפעולה הארוכה חייבת להתבצע לפני פעולה אחרת מבצעים אותה, מקבלים בסיומה הודעה (call back) וממשיכים לרוץ משם. מי שדואג שהבקשה הזו לא תתקע בקשות אחרות היא מערכת ההפעלה (שמסתירה בתוכה טיפול בכל מיני בקשות במקביל. דרך אגב: במימושים מסויימים טיפול בבקשה אסינכרונית יוצר thread ברמת הקרנל: http://lwn.net/Articles/316806/ ).
|
|
חזרה לתוכן הדיון |
פורסם: 04/11/2013 - 09:01
נושא ההודעה:
|
צפריר מה שאתה אומר בתאוריה נכון אבל לפחות בשרתים מבוססי פיתון ה- io.loop תוקע את כל הבקשות אם יש לו פעולת IO ארוכה לבצע. למעשה גם פעולת על sockets. לעומת זאת בשרתים מובססי thread כמו lighthttpd זה לא תוקע את השרת (בכל מקרה נראה שצריך שימוש ב- trhreads אם אתה עושה את זה בקרנל מה טוב).
|
|
חזרה לתוכן הדיון |
פורסם: 04/11/2013 - 09:30
נושא ההודעה:
|
אישית אני גם לא מת על threads....
|
|
חזרה לתוכן הדיון |
פורסם: 04/11/2013 - 16:11
נושא ההודעה:
|
2 : | צפריר מה שאתה אומר בתאוריה נכון אבל לפחות בשרתים מבוססי פיתון ה- io.loop תוקע את כל הבקשות אם יש לו פעולת IO ארוכה לבצע. למעשה גם פעולת על sockets. לעומת זאת בשרתים מובססי thread כמו lighthttpd זה לא תוקע את השרת (בכל מקרה נראה שצריך שימוש ב- trhreads אם אתה עושה את זה בקרנל מה טוב). |
lighttpd הוא גם async ככל הזכור לי, single loop, single thread. צריך להבין שבהקפים גדולים ה־threads ומערכת ההפעלה עצמה הם הרבה פעמים הבעיה ולא הפתרון. אם רוצים להתעמק בנושא, יש מאמר מצויין בנושא:
The Secret to 10 Million Concurrent Connections -The Kernel is the Problem, Not the Solution
|
|
חזרה לתוכן הדיון |
|