Whatsup - לינוקס, תוכנה חופשית וקוד פתוח בעברית

תיכנות בלינוקס - אסינכרוני javascript, האם חסין מ race condition?

Anonymous - 22/01/2020 - 01:24
נושא ההודעה: אסינכרוני javascript, האם חסין מ race condition?
קוד:

var z = {val: 0}

var ary=[]
for (let i=0;i<3;i++){
    console.log( `i is ${i}`,i)
    th= new Promise((z)=>{
        for (i=0;i<50000;i++){
            z.val++;
        }
    })

    ary.push(th);
}


אני לומד בשביל הכיף תכנות אסינכרוני ב cpp והחלטתי לבדוק אם javascript חסין
מ race condition ברמת הזיכרון....

לפי מה שאני רואה היא שהוא לא,
אני מקבל 50000 בערך של z והוא לא מוכן לרוץ את שאר הפעמים
וגם סמתי כל enclosure אפשרי...
גם השתמשתי ב let ולא ב- var



1. האם אני צודק?
2. האם אני מבצע את הבדיקה נכון?
3. האם גיליתי באג בכרום?
Anonymous - 22/01/2020 - 01:28
נושא ההודעה: Re: אסינכרוני javascript, האם חסין מ race condition?
בעצם הוא כן חסין, ביצעתי את הבדיקה לא נכון
אפשר להתעלם.....
מצורף הבדיקה הנכונה...
קוד:

function g(z){
    for (i=0;i<50000;i++){
        z.val++;
    }
}

var z = {val: 0}


var ary=[]
for (let i=0;i<3;i++){
    console.log( `i is ${i}`,i)
    th= new Promise(()=>{g(z)})

    ary.push(th);
}

Anonymous - 22/01/2020 - 01:46
נושא ההודעה:
בעצם זאת לא בדיקה נכונה, כ promise רץ תמיד על thread אחד
והם ״מוגנים״ כי הם רצים אחד אחרי השני...

בדיקה אמיתי אפשר לעשות עם web worker אבל גם אותו לא ניתן לישבור כי פרמטרים ל webworkers תמיד מועתקים ולא מועברים ברפרנס..
Anonymous - 22/01/2020 - 07:49
נושא ההודעה:
ממה שקראתי פעם js היא non blocking single threaded
או שזה היה node?
זה קשור בכלל לנושא? אז למה אני מתערב ?
תתעלם
Anonymous - 22/01/2020 - 13:49
נושא ההודעה:
הדרך לבדוק את זה היא ליצור מספר טרדים במקביל עם web workers

ולנסות להציג ולהדפיס ערכים של משתנה גלובלי כלשהו.
הסיבה לכך היא שכרגע אתה סיריאלי.
Anonymous - 22/01/2020 - 20:32
נושא ההודעה:
אבל אם אני בהכרח מעתיק את הערכים ולא פונה ב ref אז אין סיבה שאגיע ל race condition
המערך שמוכנס ל web worker הוא כמו להגיד
JSON.serielize(what ever)


Anonymous :
הדרך לבדוק את זה היא ליצור מספר טרדים במקביל עם web workers

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

Anonymous - 22/01/2020 - 20:33
נושא ההודעה:
בטיטו :
ממה שקראתי פעם js היא non blocking single threaded
או שזה היה node?
זה קשור בכלל לנושא? אז למה אני מתערב ?
תתעלם


זה בידיוק זה הנושא למעשה זה רץ סרייאלי, אני חושב שבאמת אין דרך לשבור את ה javascript ב- race condition
כל הזמנים הם GMT + 2 שעות