2

私は Node JS に魅了され、飛び込み始めましたが、Java のバックグラウンドから来て、共有変数に依存して追跡する非同期呼び出しのチェーンが行われる以下のような例に混乱しています (したがって、いつそれらはすべて別のアクションを実行するために完了しています)。この質問が基本的すぎる場合は申し訳ありませんが、これについて検索して説明が見つかりませんでした。おそらく正しい用語を使用していません。

Javaでこのようなことをした場合、衝突を避けるために変数nを同期させる必要があります。そうしないと、その整合性が損なわれる可能性があります(これは、私が読んだより複雑な例に基づいた疑似コードです。完璧ではない場合は申し訳ありません)

    var n = 100

var funct_a = function(callback) {
   return function() {
       if (n == 0)
         callback()
       else
         n--
    }
}

for ( a in someArray) {

  funct_a (function() {
     //do something with variable a...
 })
}

これらは1つの「スレッド」でのみ実行されているため、実際には異なるCPUコアで実行されておらず、変数に同時に書き込むことはできませんか? これは、これらのタイプの競合を解決するいくつかのコアノードサーバーロジックを除けば、私にとって唯一の論理的な説明のようです. これに光を当てるための情報は大歓迎です。

4

2 に答える 2

2

node.jsclosuresシングル スレッドですが、JavaScriptと、JavaScript で関数スコープがどのように機能するかについて、より懸念しているようです。n実際、アクセスできる他のコードがある場合、そうです、callback()呼び出しはおそらく期待どおりに動作しません。ただし、より高いレベルの観点からは、CommonJS モジュールは変数が になるのを防ぐため、n変数globalを公開したり、モジュール内でいじったりしない限り、n改ざんされないことを知っておく必要があります。ご存知かとは思いますが、以下の点に注意してください。

  • JavaScript モジュラー パターン; 特にnode.jsのCommonJSですが、AMDも学びます
  • JavaScript 関数のスコープ
  • JavaScript クロージャ

HTH マイク

于 2012-08-28T04:05:20.197 に答える
1

node.js では、I/O 操作を除くすべてのコードが同期的に機能します。Javaとは全然違います。この記事を読んでみてください。

于 2012-08-28T04:11:34.363 に答える