ネティロックフリーシリアルデザインコンセプト

ロックフリーシリアルデザインコンセプト

ほとんどのシナリオでは、並列マルチスレッド処理により、システムの同時パフォーマンスを向上させることができます。ただし、共有リソースへの同時アクセスが不適切に処理されると、深刻なロック競合が発生し、最終的にパフォーマンスが低下します。ロック競合によるパフォーマンス低下を極力回避するために、シリアル化設計を採用することができます。つまり、メッセージの処理を可能な限り同じスレッドで完了し、この期間中はスレッド切り替えを実行しないため、マルチスレッド競合や同期ロックを回避できます。

Nettyは、パフォーマンスを可能な限り向上させるために、シリアルロックフリー設計を採用してIOスレッド内でシリアル操作を実行し、マルチスレッドの競合によるパフォーマンスの低下を回避しています。表面的には、シリアル化された設計はCPU使用率と同時実行性が低いようです。十分ではない。ただし、NIOスレッドプールのスレッドパラメータを調整することにより、複数のシリアル化されたスレッドを同時に開始して並行して実行できます。この部分的なロックフリーのシリアルスレッド設計は、キューマルチワーカースレッドモデルよりも優れたパフォーマンスを発揮します。

Nettyのシリアル化設計の動作原理図は次のとおりです。

NettyのNioEventLoopはメッセージを読み取った後、ChannelPipelineのfireChannelRead(Object msg)を直接呼び出します。ユーザーがスレッドをアクティブに切り替えない限り、常にNioEventLoopによってユーザーのハンドラーに呼び出されます。この間、スレッドの切り替えは実行されません。このシリアル化メソッドは回避します。マルチスレッド操作によって引き起こされるロック競合は、パフォーマンスの観点から最適です。

おすすめ

転載: blog.csdn.net/madongyu1259892936/article/details/110171267