0
私はワークロードジェネレータクライアントでタイマーを使用してサーバーにメッセージをストリーミングしています。作成されたスレッドの数またはチャネルの共有に複数のtimertasksを使用することの影響はありますか?
これは、負荷を生成するための推奨アプローチであるかどうかを理解したいと思います。私はこのように他の指数関数的な遅延や他のタイプの遅延を持つかもしれません。
public class TestClientHandler extends SimpleChannelHandler {
private Timer timer = new HashedWheelTimer();
Channel channel;
public TestClientHandler() {
timer.newTimeout(new DataStreamer(this),
1000,
TimeUnit.MILLISECONDS);
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
e.getCause().printStackTrace();
org.jboss.netty.channel.Channel ch = e.getChannel();
ch.close();
}
@Override
public void channelConnected(ChannelHandlerContext ctx,
ChannelStateEvent e) {
this.channel = e.getChannel();
ChannelFuture future = e.getChannel().write("SOMETHING");
}
}
質問2:私は、要求の種類ごとに異なるチャンネルを維持するにはどうすればよい
?優先順位に基づくアイデアはありますか? OrderAwareMemoryHandlerは別のスレッドで議論されているように、PriorityBlockingQueueでプラグインすることをお勧めしますか?
Q1:スレッドは1つのみです。 Nettyに複数のスレッドでワークロードを生成させる方法がありますか?私は複数のクライアントを実行することができますが、Nettyがクライアント内で複数のスレッドを実行するために必要な機能を使用しようとしていました。私は、並行処理フレームワークがこれを行うことを知っています。 Q2。別のチャネルを割り当てることで、サーバー上でSLAを使用できますか? NIO自体がイベントに基づいているため、これは意味をなさないことを望みます。あるチャネルのメッセージはNettyによって処理され、異なるタイプのメッセージは優先度が低くなります。これは賢明ですか? –
Q1:通常、新しいチャネルを作成すると、nettyはそのチャネルをワーカースレッドに割り当てます。ワーカースレッドの総数は、デフォルトでNumber_of_cores * 2です。ワーカースレッドより多くのチャネルを作成すると、1つのワーカースレッドに多くのチャネルが割り当てられます。したがって、マルチスレッドの負荷を作成するには、より多くのチャネルを作成する必要があります。より多くのスレッドでNioClientSocketChannelFactoryの "workerCount"パラメータを調整するには –