2013-12-23 34 views
11

node.jsのコードの詳細を調べていません。Java NIOノンブロッキングモードとnode.js非同期操作

しかし、Node.jsのスレッドに関するいくつかの調査を行ったところ、複数のクライアントからの接続を受け入れるための単一のスレッドがあることがわかりました。

クライアントと接続すると接続イベントが発生し、別のクライアントをリッスンし、非同期スタイルで完全に動作し、クライアント要求の休止操作がスレッドプールから実行され、結果がコールバック経由でメインスレッド(接続を受け入れるスレッド)に返されます。 。

Java NIOでもServerSocketChannelと同様に、SocketChannelは非ブロッキングモードで設定することができ、セレクタのシングルスレッドで複数のチャネルを監視することができます。したがって、NIO ServerSocketChannel、SocketChannelをシングルスレッドから使​​用すると、複数のクライアントに対して非同期で接続を管理することができます。

NIOの非ブロッキングモードであり、シングルスレッドのnode.js非同期は、 ?両方とも、単一のスレッドで実行されると言います。

+1

非同期と非ブロックが類似のパターンであると仮定するのはよくある誤解です。 Node.jsには、ノンブロッキングのソケット操作もあります。したがって、両方のフレームワークでは、非スレッドIOを使用して、単一スレッドから複数の点を処理することができます。 – user568109

答えて

1

いいえ、ノンブロッキングとは、操作がブロックされないことを意味し、操作が何を行ったかを示します。非同期とは、オペレーションが並行して継続し、完了したときにコールバックすることを意味します。それらは全く異なるプログラミングパラダイムです。

+0

私はこの質問を書いたhttp://stackoverflow.com/questions/35660710/if-a-web-server-is-non-blocking-does-this-mean-it-is-handling-io-the-same-as - あなたが私が同じことを混乱させていると思うかどうか疑問に思った。 – johnny

+0

@johhnyはい、あります。 – EJP

4

一般に、非同期、特にNIOは、必ずしもシングルスレッドでサポートされているわけではありません。パフォーマンスを向上させるために複数のスレッドでサポートできます。ただし、マルチスレッドには追加の同期が必要です(複雑ではなく正確です)。 javascriptには同期ユーティリティがないため、Node.jsはシングルスレッドを使用する必要があります。 Java非同期フレームワークは複数のスレッドを使用できます。

アペンディックス

なぜNode.jsは設計上シングルスレッドですか? Understanding Node.jsから:

"So I don't have to worry about code accessing the same data 
structures at the same time?" 

You got it! That's the entire beauty of JavaScripts 
single-threaded/event loop design! 

だから、シングルスレッド設計の最も可能性の高い原因は、同期の概念に精通していない大挙、JavaScriptのプログラマを、喜ばせるためです。

+2

Node.jsはシングルスレッドを使用しているため、同期プリミティブは必要ありません。逆のことはありません。 – vkurchatkin

+0

@vkurchatkin –

+0

あなたは、node.jsがシングルスレッドである理由は、javascriptには同期ユーティリティがないということです。これは真実ではありません - node.jsは設計上のシングルスレッドなので、必要ありません。彼らが必要とされていれば、実装することができます、それを防ぐことができるjavascriptについては何もありません – vkurchatkin

関連する問題