11

思考実験があります。私のコードにはグローバル変数がvar changeMe;あり、Ajax 呼び出しをほとんど行っていません。

 //call One -- third param is the callback function
    ajaxFunction(url1, params,function(data){
        changeMe = data;
    });

//call Two
    ajaxFunction(url2, params,function(data){
        changeMe = data;
    });

したがって、changeMe値はどの Ajax 呼び出しが最後に終了するかによって異なります。つまり、最後に終了した呼び出しが値を上書きします。

両方の呼び出しがまったく同時に、同じタイムスタンプで終了した場合はどうなりますか?

Javascript はシングルスレッドであるため、通常、この問題は発生しませんがsetTimeout、Ajax 呼び出しの場合に発生する可能性があります。この問題を正確に再現する方法がわからないので、まだ思考実験のままです。

では、マルチスレッド環境でデッドロックはどのように処理されるのでしょうか?

changeMe私は、url1またはのような答えurl2と、明確な状況説明を好みます..

前もって感謝します

4

2 に答える 2

5

Javascript の非同期操作はバックグラウンドで実行されますが、コールバックを含むすべての Javascript コードはフォアグラウンド スレッドで実行されます。そのため、2 つのコールバックが同時に実行されることは設計上不可能です。

2 つの非同期操作がまったく同時に終了した場合、両方が同時に完了したことを通知し、Javascript スケジューラは 2 つのコールバックのいずれかを選択して最初に実行します。

どのコールバックが最初に実行されるかは、実装とオペレーティング システムに固有のものであり、すべての意図と目的のために、ランダムであると想定できます。

于 2013-08-04T06:26:11.037 に答える