Netty 官方紹介#
Netty は、メンテナブルで高性能なプロトコルサーバーとクライアントの迅速な開発のための非同期イベント駆動型ネットワークアプリケーションフレームワークです。
Netty は、プロトコルサーバーやクライアントなどのネットワークアプリケーションの迅速かつ簡単な開発を可能にする NIO クライアントサーバーフレームワークです。TCP や UDP ソケットサーバーなどのネットワークプログラミングを大幅に簡素化し、効率化します。
「迅速かつ簡単」ということは、開発されたアプリケーションがメンテナンス性やパフォーマンスの問題を抱えることを意味しません。Netty は、FTP、SMTP、HTTP、さまざまなバイナリおよびテキストベースのレガシープロトコルなど、多くのプロトコルの実装から得られた経験を元に慎重に設計されています。その結果、Netty は開発の容易さ、パフォーマンス、安定性、柔軟性を妥協することなく実現する方法を見つけることに成功しました。
Netty を学ぶ理由#
- Netty は、業界内でのネットワーク通信プログラミングの標準であり、通信領域や他の多くのミドルウェア技術の基盤として広く使用されています。
- 広範なアプリケーションで使用されています。
- ゲーム業界
- 多くのフレームワークの通信基盤、プロセス間通信の解決。
Spring WebFlux、storm、rocketMQ、dubbo など、分散システムの通信の中核です。
伝統的な IO の問題点は何ですか?#
- マルチスレッドネットワークプログラミング
1.1 スレッド作成のオーバーヘッド
伝統的な IO 通信では、各クライアント接続ごとにサーバープログラムでスレッドを開始します。スレッドの開始と終了にはコストがかかります。
2.2 CPU 使用率が高い
1000 個のスレッドが同時に存在すると仮定すると、各スレッドのタイムスライスが終了するたびに、コンテキストスイッチ(タイムスライスが終了したときに実行された場所を保存しておき、次回タイムスライスを取得したときにこの場所から再開するための操作)が発生し、オーバーヘッドが発生します。
2.3 メモリ使用率が高く、無限にスレッドを作成することはできません
ハードウェアリソースは貴重です。Java では、1 つのスレッドが約 1MB を占有します。大量の作成はメモリ不足を引き起こす可能性があります。
- スレッドプールネットワークプログラミング
プール化の考え方は、無限にスレッドを作成する問題を解決し、コード内でマルチコア CPU の利点を活用できます。
しかし、新たな問題が発生します。たとえば、100 のスレッドが入ってきた場合、スレッドプールには 10 個のリクエストを処理できるスレッドしかなく、残りの 90 個のスレッドはキューで処理待ちをすることになり、ブロッキングの問題が発生します。
上記の例は比較的理想的な状況ですが、入ってきた 10 個のスレッドが何らかの理由で常にブロックされている場合、スレッドプールの 10 個のスレッドは残りの 90 個のリクエストの処理を待たなければならず、ブロッキングの問題が非常に深刻になり、有限なリソースの浪費につながります。
結論#
なぜ Netty を使用するのか、それは Netty が NIO を使用しているためであり、上記の通信の問題を解決しているからです。
完了!!!