0

私のサーバーには、メッセージ形式が異なる2つの異なるタイプのクライアントがあるため、サーバーには2つのタイプのクライアントリクエストをそれぞれ処理する2つのNioServerSocketChannelFactoryがあります。これら 2 つのタイプのクライアントは、2 つの NioServerSocketChannelFactory のハンドラーで同じオブジェクトにアクセスする必要があります。2 つの ChannelPipeline で同じ OrderedMemoryAwareThreadPoolExecutor オブジェクトを共有できますか?

例えば:

Channels.pipeline(
    concurrencyHandler,
    new Handler1());
}

Channels.pipeline(
    concurrencyHandler,
    new Handler2());
}

handler1 と 2 が同じオブジェクトにアクセスする場合、OrderedMemoryAwareThreadPoolExecutor はスレッドの同時実行を処理しますか?

4

2 に答える 2

1

OrderedMemoryAwareThreadPoolExecutor は Channel id を使用して特定の Channel の適切な Executor を検索するため、ChannelFactory ごとに 1 つの ExecutionHandler を使用する必要があります。Channel id は ChannelFactory ごとにのみ一意であるため、異なる ChannelFactory 間で共有すると、悪影響が生じる可能性があります。

于 2012-04-18T09:56:00.893 に答える
0

2 つの ChannelFactory で OrderedMemoryAwareThreadPoolExecutor を共有すると、スレッド間の同期が取れなくなります。Channel には専用のタスク キューがあります。2 つのチャネルの 2 つのタスク キュー内のタスクが正常に実行されることを証明することはできません。異なるキュー アクセス 1 つのオブジェクト内のタスクは同期できません。

于 2012-04-18T11:36:26.230 に答える