[解決済み】同期プログラミングと非同期プログラミングの違いとは(node.jsの場合)
質問
を読んでいます。 ノードビギナー そして、次の2つのコードに出会いました。
1つ目は
var result = database.query("SELECT * FROM hugetable");
console.log("Hello World");
2枚目です。
database.query("SELECT * FROM hugetable", function(rows) {
var result = rows;
});
console.log("Hello World");
データベースへの問い合わせを行い、問い合わせに対する答えを取得する、ということはわかった。そして
console.log('Hello world')
.
最初のものは、同期コードと思われるものです。 そして2つ目は非同期なコードです。
この2つの作品の違いは、私にはとても曖昧です。出力はどうなるのでしょうか?
非同期プログラミングでググってもダメでした。
どうすればいい?
での違いは
最初の例
の場合、プログラムは1行目でブロックされます。次の行(
console.log
を待つ必要があります。
での
第二例
を使用すると
console.log
は、クエリの処理中に実行されます。つまり、プログラムが他の処理をしている間、クエリはバックグラウンドで処理され、クエリデータの準備ができたら、それを使って好きなことをすることができるのです。
つまり、一言で言えば 最初の例はブロックされるが、2番目の例はブロックされない。
次の2つの例の出力です。
// Example 1 - Synchronous (blocks)
var result = database.query("SELECT * FROM hugetable");
console.log("Query finished");
console.log("Next line");
// Example 2 - Asynchronous (doesn't block)
database.query("SELECT * FROM hugetable", function(result) {
console.log("Query finished");
});
console.log("Next line");
でしょう。
-
Query finished
Next line
-
Next line
Query finished
備考
Node 自身は
シングルスレッド
しかし、いくつかのタスクは並行して実行することができます。例えば、ファイルシステムの操作は別プロセスで行われます。
そのため、Nodeは非同期処理を行うことができます。1つのスレッドがファイルシステム操作を行い、メインのNodeスレッドがあなたのjavascriptコードを実行し続けることができるのです。Node のようなイベント駆動型サーバでは、ファイルシステムスレッドは完了、失敗、進行などの特定のイベントを、そのイベントに関連するデータ(データベースクエリの結果やエラーメッセージなど)と共にメインノードスレッドに通知し、メインノードスレッドはそのデータに対して何をするかを決定します。
詳しくはこちらをご覧ください。 Node.jsにおけるシングルスレッド・ノンブロッキングIOモデルのしくみ
関連
-
[解決済み】Javascript:getElementById対getElementsById(両方が別のページで動作する)。
-
[解決済み】リソースはドキュメントと解釈されるが、MIMEタイプはapplication/zipで転送される
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] package.jsonのチルダ(~)とキャレット(^)の違いは何ですか?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] npm package.jsonファイルのdependencies, devDependencies, peerDependenciesの違いは何ですか?
-
[解決済み] Bowerとnpmの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】node.js TypeError: path must be absolute or specify root to res.sendFile [JSONのパースに失敗しました]。
-
[解決済み】webpack: モジュールが見つかりません。Error: 解決できない(相対パスで)
-
[解決済み】Google Conversionsが動作しない - スクリプトが読み込まれない
-
[解決済み】エラー:リスン EACCES 0.0.0.0:80 OSx Node.js
-
[解決済み】Uncaught SyntaxError: JSON の位置 0 に予期しないトークン u があります。
-
[解決済み】エラー:リクエストのエンティティが大きすぎる
-
[解決済み】DOMException: サポートされているソースが見つからなかったため、読み込みに失敗しました。
-
[解決済み】Vueが定義されていない
-
[解決済み】中央値の計算 - javascript
-
[解決済み】Node.jsのシングルスレッド・ノンブロッキングIOモデルの動作について