2016-07-07 3 views
0

ノードイベントループの仕組みと、単一の「メイン」スレッドから非同期操作を実現する方法について説明した記事をいくつか読んだが、わかりやすかった -すべてのasync IO nodejsコードがlibuvを使用していますか?

すべての非同期IO nodejsコードフードの下でlibuvを使用しますか? 例:Sequelize/TediousによるDBへの接続

私の理解の目標は、process.env.UV_THREADPOOL_SIZEを増やしてDB接続でボトルネックが発生するかどうかを判断することです。ログにタイムアウトがあり、DB接続を待っていますが、DBサーバーはパフォーマンスの問題を一度も表示していません。すべての非同期操作がlibuvスレッド・プールを使用しない

https://www.future-processing.pl/blog/on-problems-with-threads-in-node-js/ http://abdelraoof.com/blog/2015/10/28/understanding-nodejs-event-loop/ https://nodesource.com/blog/understanding-the-nodejs-event-loop/
When is the thread pool used?

+0

libuvは非同期I/O用です。 'setTimeout'のようなすべての非同期イベントがI/O操作を実行しているわけではありません。しかし、libuvが[もともとNode.js用に開発されていた](https://github.com/libuv/libuv#overview)とすれば、すべての非同期I/Oが処理される可能性が高いと言えます。 –

+0

コメントありがとうございます。私は明確にするために私の質問を更新しました。 – Jeremy

答えて

0

-

これらは私が読んでいる記事です。彼らはすべてlibuvのインターフェースを経由するかもしれませんが、libuvの中のカバーの下にすべてのスレッドを使用するわけではありません。

たとえば、タイマーはスレッドを使用せず、ネットワーク呼び出しはスレッドを使用しません。どちらもOSレベルの非同期機能を使用します。私の理解では、すべての主要なプラットフォームは非同期ディスクI/O用のスレッドプールを使用しています(OSレベルの非同期ディスクI/Oは一部のプラットフォームに存在します)。温度プローブなどを読み取るなど、特定のライブラリで実装できるその他の非同期操作は、すべて自分のメソッドを使用することができます。これはlibuvやnode.jsによって決定されるものではありません。

データベースのボトルネックがどこにあるのかを理解するためには、特定のデータベースを実装するコードを調べる必要があります。それはスレッドを使用している可能性がありますが、同時DB接続の数も制限されている可能性があります。それ自身の内部接続プールを持ち、それを増やす必要があるかもしれません。特定のコードの検査と、あなたが観察した特定のケースをどのように処理するかは、確実にあなたに伝えます。 「一般的な」答えはありません。 node.jsへのdbインタフェースがどのようにコード化されているかによって異なります。

関連する問題