ホームページ  >  記事  >  ウェブフロントエンド  >  JSシングルスレッド非同期ioコールバックの特徴を詳しく解説

JSシングルスレッド非同期ioコールバックの特徴を詳しく解説

小云云
小云云オリジナル
2018-01-03 10:46:391340ブラウズ

JavaScript への最初の接触のほとんどは HTML の js スクリプトから始まりましたが、この一見単純な言語をその原理やメカニズムの一部を理解せずに使用してきました。少なくとも JavaScript のさまざまなイベント コールバックが使用されています。この記事では主に JavaScript のシングルスレッド非同期 IO コールバックの特性を分析します。この内容が参考になれば幸いです。

この処理では、onclick="doCheck()"のようなイベントコールバック関数をdom要素にバインドします。この処理は、dom要素のクリックイベントを登録し、イベントコールバック関数doCheck()をバインドします。マウスがこの要素をクリックすると、イベントがトリガーされ、イベント バインディング関数が即座に実行されて返されます

その後、jquery に触れるようになると、大量の

$("#id").click(function(){
alert('点击事件');
});

が記述されるようになりました。 jquery 構文では、慣れてきたように見えますが、前のセレクターは DOM ノードを選択してフィルターするだけであり、その後のクリックはイベント登録であり、内部の function(){} は実際にはパラメーターであることに気付きます。 、イベント バインディング関数のパラメーター。これには、JavaScript の構文に精通している必要があります。

関数は、世界中のすべてのものを参照できるため、オブジェクトには多くの属性、メソッドを含めることができます。

それはオブジェクトなので、渡すことができます。この種の関数は高階関数と呼ばれます

そして、この種の関数には定義された名前がありません。名前を付けることができ、名前を渡しても同じですが、ここでの関数オブジェクトは実際には仮パラメータであるため、この種の関数には名前を付けないことに慣れています。はよく匿名関数と呼ばれるものです。

上記の $("#id").click に続いて、 click イベントがトリガーされたときに、イベント バインディング関数を実行する必要があります。これは、 を直接与えるのと同じ効果があります。上の dom の onclick メソッド

スクリプトを操作するためにブラウザーに複数のスレッドがあると仮定すると、混乱を想像できますか? スレッド 1 は正しいです。要素 A の値を変更したいのですが、それは予想外でした。スレッド 2 はすでに dom ツリーから要素 A を削除しています。この時点で、スレッド 1 が失敗してエラーが報告されました。これは、ブラウザが複数のスレッドを維持していないため、フロントエンドによってデータの一貫性が維持されている必要があります。エンジニア自身がそうしているので... ブラウザには dom を操作するためのスレッドが 1 つしかないため、多くの不要なトラブルが回避されます

setTimeout(function(){
alert('弹出');
},300);

while(true){
	........
}

300 ミリ秒後にアラートが発生すると思いますか?何か楽しいことはありますか?

いいえ、何も楽しいことはありません。ブラウザはシングルスレッド モードでスクリプトを実行するためです。

スレッドが無限ループ モードになると、 while ステートメントを実行すると、setTimeout は何の効果もなくなります

そして、ブラウザの JavaScript の特性であるシングルスレッドの非同期コールバックを完全に保持する、node.js の世界に入りました。それはまさにこの機能のおかげです。それはそれです。node.js が同期言語である場合、すべての npm パッケージを C++ で拡張したとしても (速度は十分に速い)、どんなに速くても C 言語の処理速度には勝てませんよね。 ? それでは、node.js はまだ PHP から軽蔑されているのかもしれません

非同期コールバック IO があるからこそ、効率を向上させることができるのです。学校と学食:

食堂は全生徒が食べる場所です 窓際に皿が並んでいて、食事を作ってくれたお姉さんが1枚ずつ盛り付けて、ご飯を1枚ずつ持ってきて去っていきました。これは同期の結果です

学校のファーストフード レストランでも、生徒たちが注文の列に並んでいますが、注文後は受け取ります。このようにして、ウェイターは多くの人にサービスを提供できます。単位時間内に、食事を注文した生徒は、窓際に立って食事を待つ代わりに、席を見つけて自分の好きなことをすることができます。食事が出てくると、サーバーはそのコードに従ってコードを押します。このとき、テーブル上のポケベルが鳴るので、食事を取りに行くだけです。これは非同期処理です。

単一スレッドにより、リソースの無駄が削減されます。もちろん、マルチコアおよびマルチスレッドのシナリオをサポートするための専用のサードパーティ パッケージもあります。

関連する推奨事項:


JavaScript SetTimeout の単一のスレッド

シングルスレッドプログラミング言語PHPがマルチスレッド操作を実装する方法

JavaScriptのシングルスレッドについていくつか詳しく紹介します(写真)

以上がJSシングルスレッド非同期ioコールバックの特徴を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。