GNU/Linux >> Linux の 問題 >  >> Linux

node.js の内部非同期 I/O メカニズムに関する混乱

<オール>
  • まず、libuv libeio を削除しました それから。ただし、libeio のようなスレッド プールで非同期ファイル I/O を実行します。 あなたが言った通りです。

  • libuv libev も削除します . epoll など、さまざまなプラットフォームの非同期 I/O インターフェイスに基づいて、非同期ネットワーク I/O を実行します。 、 kqueueIOCP 、スレッドプールなし。 uv のメイン スレッドで実行されるイベント ループがあります。 I/O イベントをポーリングして処理します。

  • libuv 内のスレッド プール 固定サイズのスレッドプールです (システムのような uinx では 4)。タスク キューの役割を果たし、要求が増加したときに無限にスレッドを生成することで、システム リソースの枯渇を回避します。


  • バージョン 0.6 ノードまで libev を使用 イベントループと libeio を実行する 非同期 I/O 用 (Unix バックエンドはこれら 2 つのライブラリに大きく依存しています)。しかし libuv libev の置き換えを開始しました と libeio バージョン 0.8 で。イベント プール内のすべての io およびイベントを実行、維持、および管理します。 libuv クロスプラットフォームの非同期 IO ライブラリの選択肢です。

    <オール>
  • はい、ノード 0.6 まで、0.8 で廃止され、スレッド プールを使用します
  • はい、でも libev スレッドプールを使用しません。こちらをご覧ください

    明確化:私が投稿した質問のリンクによると、 libeio I/O (ソケットを含む) を扱うすべての POSIX 関数をサポートします。しかし、ノード作成者は非同期ファイル I/O のみに使用することに決め、libev を使用します。 ネットワーク I/O 用。どこから聞いたのかわかりませんが、通常のファイルで epoll を使用できます。

  • libev イベント ループを使用するため、ここでは問題ありません。

  • はい、IOCP は Windows で非同期 I/O を処理します。カーネルはスレッド プールを使用します。
  • 新しい Linux カーネルには、新しい BSD カーネルに epoll、kqueue があります。 libevlibeio Linux 環境用であり、すべてのカーネルにイベント ループ/非同期 IO を提供します (select、poll、epoll、kqueue をサポート)。
  • 更新に関する質問:

    <オール>
  • libuvについてよく知らない
  • たぶん十分です(わからない)
  • これがWindows 8での私の発見であり、Process Explorerで確認しました。ノード アプリケーション プロセスの 4 つのスレッド、1 つの DLL、1 つのファイル、および 1 つのセクション (合計 7 エントリ) を示しました。

  • ps -eLf ps -eLf | grep x のようなノード プロセス pid を探してください。 ここで、x はノード プロセスの pid です。


  • Linux
    1. LinuxコマンドラインからのI/Oレポート

    2. Linux –高I / Oの原因となる特定のファイルを決定しますか?

    3. プロセスごとのI/Oを最大制限まで調整するにはどうすればよいですか?

    1. Node.jsの競合:/ sbin/nodeと/usr/ bin / node?

    2. 高I/Oインスタンスのフラッシュドライブをデータドライブとして構成する

    3. 汎用またはI/Oクラウドサーバーへの移行に関する考慮事項

    1. 汎用サーバーまたはI/Oサーバーに移行する

    2. Linuxで「中断できない」プロセスを停止するには?

    3. Linux と I/O 完了ポート?