イベント ドリブンと nodejs に関するいくつかの投稿を読んだ後、イベント ドリブンがスレッドのメモリ割り当てを回避し、可能な場合はポーリングを通知に置き換えるという唯一の利点がわかりました。
他の利点はすべて議論の余地があります。
マルチスレッド プログラムは、シングル スレッドよりもミスを犯しやすいです。
議論: Web アプリケーションの場合、ハンドラー関数に副作用がない限り、リクエストは互いに独立しています。すべての IO 部分がデータベース サーバーによって処理される場合、マルチスレッドについて心配する必要はありません。
イベント ドリブン アプローチは IO でブロックされないため、より多くのリクエストを処理できます。この利点は、イベント駆動型の最も重要な機能のようです。この例では診療所と比較していますが、これは適切ではないと思います。
主張:診療所の例では、受付係は患者が用紙に記入するのを待たずに、前の患者が用紙に記入している間、他の患者にサービスを提供します。これは誤解を招く例です。
a. 患者をサーバーにリクエストを送信するクライアントとして解釈する場合。もちろん、サーバーは、クライアントが独自のブラウザーでフォームに入力するのをブロックしません。そして、クライアントがフォームを完成させ、http POST をサーバーに送信すると、サーバーは動作を開始します。Web は、nodejs が存在する前からすでにイベント ドリブン システムでした。したがって、この例は、サーバー側のイベント ドリブン プログラミングを説明するのに有効ではありません。
b. 患者がフォームに記入することは、サーバー側の IO 集中型操作であると解釈すべきだと言う人もいるでしょう。しかし違いは、患者がフォームに記入するのにお金を払うのではなく、IO 集中型の手術にお金を払うということです。
だから私の主張は、時間のかかる操作が現在のスレッドをブロックしていなくても、他のスレッド、またはプロセスまたはデータベース サーバーがブロックされているということです。ブロッキングがないため、nodejsが10kの同時接続を提供できることを何度も目にします。時間のかかる部分を処理するのに十分な他のスレッド、プロセス、またはサーバーがなければ、それは不可能だと思います。
この場合、イベント ドリブンは nginx を使用したロード バランシング以外の何物でもありません。ただし、ロード バランシングはアプリケーションへのリクエストをバランスさせますが、イベント ドリブンはリクエストを時間のかかる操作にバランスさせ、ロード バランシング レイヤーを後方に移動します。そうすることの唯一の利点は、この質問の冒頭で述べた 2 つです。1. スレッドのメモリ割り当てを回避します。2. 可能であれば、ポーリングを通知に置き換えます。
ここまで読んでくれてありがとう、私の質問は: 私の理解は正しいですか? 私の議論で間違いはありましたか?