0

明らかに、「非同期」環境 (NodeJS など) と「同期」環境の違いがよくわかりません。

あなたが同期環境に閉じ込められているとしましょう。あなたのメインループはただ言うことはできません:

while(1) {
events << check_for_stuff_from_the_outside_world();
for e in events {e.process()}
}

それを行うことの何が問題なのですか?非同期環境ではないのはなぜですか?非同期環境はどのように異なるのでしょうか?

4

2 に答える 2

2

はい、これは多かれ少なかれ Node.js がcheck_for_stuff_from_the_outside_world()行うことcheck_for_stuff_from_the_outside_world_plus_follow_on_stuff_from_previous_events()です。また、すべてのイベントは、処理を完了する代わりに、単に作業の一部を実行してから を呼び出すように記述する必要がありますregister_stuff_for_follow_up(follow_on_event)。つまり、実際には、このイベント フレームワークとやり取りするには、すべてのコードを記述する必要があります。メインループだけが気にする必要があるため、「透過的に」行うことはできません。

これが Node.js が JavaScript である大きな理由です。ほとんどの言語には、非同期フレームワークの上に構築されていない既存の標準ライブラリ (I/O など) があります。JavaScript は、各ホスティング環境が独自の目的に適したライブラリを提供することを期待する点で比較的まれです (たとえば、ブラウザ JS の「標準ライブラリ」は、コマンドライン JS 環境の「標準ライブラリ」とほとんど共通点がない可能性があります)。これにより、Node.js はイベント ループと連携するライブラリを柔軟に設計できるようになりました。

于 2013-10-04T23:23:25.280 に答える
0

Wikipedia ページの例を見てみましょう: https://en.wikipedia.org/wiki/Nodejs#Examples

コードが実際にサーバーの機能 (何をすべきか) に焦点を当てていることに注目してください。Node.js は基本的に、「ネットワークから何かが到着したときに何をしたいのかを示す機能を私に与えてください。ネットワークから何かが到着したときにそれを呼び出します」と言うので、すべてのコードを書く必要がなくなります。ネットワーク接続の管理などを扱います。

手作業でネットワーク コードを書いたことがある場合は、同じものを何度も書くことになることを知っていますが、プロ品質にしようとすると、(サイズと複雑さの両方で) 自明ではないコードでもあります。 、堅牢で、高性能で、スケーラブルです... (これは、誰もが言及し続けている隠れた複雑さですcheck_for_stuff_from_the_outside_world()。) したがって、Node.js は、そのすべてを実行する責任を負います (HTTP プロトコルのハドリングを含む)。 HTTP を使用して)、サーバー ロジックを記述するだけで済みます。

したがって、それ自体が非同期の方が優れているというわけではありません。彼らが提供している機能に適合するのは、たまたま自然なモデルです。

イベントベースのプログラミング (多くの GUI で使用されます)、RPC サーバー (Thrift など)、REST サーバーなど、他の多くの場所でも非同期モデルが登場することがわかります。 ..そしてもちろん、非同期 I/O。;)

于 2013-10-04T23:37:00.870 に答える