検索

ホームページ  >  に質問  >  本文

javascript - ノードの同期と非同期について

これは、書籍『NodeJS in a Simple Language』からの引用です

非同期の時間がかかるのは、最も遅いファイルに依存していると言われるのはなぜですか?
非同期であっても、シングルスレッドではないでしょうか?次のタスクを実行する前に、1 つのタスクを完了する必要があります。
最も遅いファイルによって異なりますが、この 2 つではないでしょうか? コードは同時に実行されますか?

巴扎黑巴扎黑2762日前769

全員に返信(5)返信します

  • 我想大声告诉你

    我想大声告诉你2017-05-31 10:41:42

    リーリー リーリー

    js シングルスレッドもあります。基本的なネットワークまたはファイル I/O が完了すると、イベント ループに入り、同時操作が実行されます。 。 。 1234も同時にスタートしました。誰も誰も待っていません。

    返事
    0
  • phpcn_u1582

    phpcn_u15822017-05-31 10:41:42

    お互いに干渉することなく同時に実行されます。

    返事
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-31 10:41:42

    node.js の非同期タスクの最下層はマルチスレッドで実装されます。非同期タスクの場合、ノードはスレッド プールからスレッドを取り出して実行します。スレッドプール

    返事
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-31 10:41:42

    同時と同期は別のものです!同期とは、物事が実行される順序を指します。後者は前者の結果に依存する必要があります。非同期も同時に実行されますが、物事間の接続はプロセス全体にほとんど影響を与えません。たとえば、同時に複数の ajax リクエストを行う場合、目的はデータをリクエストし、データ間に相関関係がないことを表示することだけです。たとえてみましょう!まるで道路を作っているようです!必ず最初にアスファルトを敷いてからラインをペイントしてください。そうしないと、舗装中に線を引いて舗装道路を台無しにしてしまいます。この時に同期と非同期じゃないと大変なことになりますよ!ただし、ラインマーキング、道路清掃、道路フェンスの設置は同時に実行できます。これは非同期と呼ばれ、結果には影響しませんが、フェンスの設置は他の操作よりも複雑であるため、処理速度も遅くなります。最終的に、すべてのプロセスが完了しました。一方、後の 3 つを同時に処理すると、前のステップの処理を待ってから次のステップを処理する必要があるため、待ち時間が長くなります。ただ、以前は10人で道路を作っていたのですが、後段で処理するものが3つあったので、非同期実装を実現するには30人に増やす必要があるという感じでした。 (ここではあまり専門的ではありませんが)、多くの場合、この方法で非同期のコンピューティング リソースを有効に活用できます。

    返事
    0
  • 阿神

    阿神2017-05-31 10:41:42

    プログラムは複数の CPU コアを使用して、複数のタスクを同時に並行して実行できます。最下層はマルチスレッドまたはマルチプロセスです。

    Node の最下層は libuv です。

    ネットワークの読み取りおよび書き込み (I/O) の場合、libuv は Linux 上のカーネルによって提供される epoll メカニズムを使用します。Linux カーネルの epoll の最下層はカーネル スレッドを使用して実装する必要がありますが、epoll の最下層の実装は必要ありません。 libuv は気にする必要はありません。libuv は Call するだけで済みます。

    ファイルの読み取りと書き込み (I/O) の場合、libuv は Linux AIO を使用することも、マルチスレッドを使用して実装することもできます。これは、Linux カーネルによって提供される非同期ファイル読み取りおよび書き込みメカニズム AIO は主にデータベースに機能するためです。 、MySQL は libaio.so に依存しています。現在のカーネル AIO は、ディスクの読み取りと書き込みに O_DIRECT モード (DirectIO) のみをサポートしています。これは、プログラムがシステムのキャッシュ ページ キャッシュを使用できないことを意味し、読み取りのサイズとオフセットが必要です。大きなファイルの読み取りと書き込みには適しているかもしれませんが、libuv は最下層でマルチスレッドを使用して非同期ファイルの読み取りと書き込みを実装する必要があります。

    ネットワークの読み取りと書き込みであっても、ファイルの読み取りと書き込みであっても、プログラムが戻るときは、すべてのタスクが完了してから戻る必要があるため、一般に、時間のかかるタスクは読み取りと書き込み時間が最も長いタスクになります。ただし、ファイルの読み取りと書き込みはディスク IOPS によって制限される可能性があり、必然的に輻輳が発生し、全体の消費時間が長くなる可能性があります。

    Node がサーバー プログラミングまたはサーバー中間層プログラミングに使用される場合、主にネットワークの読み取りと書き込みが発生します。

    返事
    0
  • キャンセル返事