NettyタスクキューのTaskには、3つの一般的な使用シーンがあります.
10955 ワード
各NioEventLoopにはselectorとTaskQueueがあり、時間のかかる操作を行うとブロックが発生し、TaskQueueを使用することができます.
具体的な実装は3つあります.
1.ユーザーズプログラムカスタマイズの一般的なタスク:カスタマイズされたhandlerのchannelReadメソッドで:
2.scheduleTaskQueueにコミットされたカスタムタイミングタスク
3.現在のreactorスレッド呼び出し以外の様々な方法では、パラメータを設定する際にhashcode、例えばプッシュシステムのビジネススレッドで、ユーザの識別に基づいて対応するchannel参照を見つけ、Writeクラスメソッドを呼び出してそのユーザにメッセージをプッシュすると、このようなシーンに入る.最終的なWriteはタスクキューにコミットされ非同期消費されます
シナリオの再説明
1.nettyは2組のスレッドプールを抽象化し、BossGroupはクライアント接続を担当し、WorkerGroupはネットワーク読み書き操作を担当する.NioEventLoopは、処理タスクを繰り返し実行するスレッドを表し、各NioEventLoopには、その上にバインドされたsocketネットワークチャネル3を傍受するselectorがある.NioEventLoop内部はシリアル化設計を採用し、繊細な読み書き、復号化、処理、符号化、送信から、常にIOスレッドのNioEventLoopが担当する
オブジェクトの前の関係
NioEventGroupの下に複数のNioEventLoopを含む各NioEventLoopには1つのSelectorが含まれており、1つのtaskQueue各NioEventLoopのselectorには複数のNioChannelを登録して傍受することができる各NioChannelは唯一のNioEventLoopにバインドされるだけである各NioChannelには1つの自分のChannelとPipelineがバインドされている
学習年限が足りなくて、知識が浅くて、言うことが間違っています.
世界には10種類の人がいて、1つはバイナリを知っていて、1つはバイナリを知らないのです.
具体的な実装は3つあります.
1.ユーザーズプログラムカスタマイズの一般的なタスク:カスタマイズされたhandlerのchannelReadメソッドで:
// , , channel NioEventLoop TaskQueue
// 1:
ctx.channel().eventLoop().execute(new Runnable() {
public void run() {
try {
Thread.sleep(10000);
ctx.writeAndFlush(Unpooled.copiedBuffer("hello, 1",CharsetUtil.UTF_8));
} catch (InterruptedException e) {
System.out.println(" ");
}
}
});
2.scheduleTaskQueueにコミットされたカスタムタイミングタスク
ctx.channel().eventLoop().schedule(new Runnable() {
public void run() {
try {
Thread.sleep(5000);
ctx.writeAndFlush(Unpooled.copiedBuffer("hello, 1",CharsetUtil.UTF_8));
} catch (InterruptedException e) {
System.out.println(" ");
}
}
},5, TimeUnit.SECONDS);
3.現在のreactorスレッド呼び出し以外の様々な方法では、パラメータを設定する際にhashcode、例えばプッシュシステムのビジネススレッドで、ユーザの識別に基づいて対応するchannel参照を見つけ、Writeクラスメソッドを呼び出してそのユーザにメッセージをプッシュすると、このようなシーンに入る.最終的なWriteはタスクキューにコミットされ非同期消費されます
serverBootstrap.group(bossGroup,workGroup)
// NioServerSocketChannel
.channel(NioServerSocketChannel.class)
//
.option(ChannelOption.SO_BACKLOG,128)
//
.childOption(ChannelOption.SO_KEEPALIVE,true)
// workGroup EventLoop
//
.childHandler(new ChannelInitializer<SocketChannel>() {
// pipeline
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
// socketChannel ,
// , channel NIOEventLoop taskQueue scheduleTaskQueue
System.out.println(" socketChannel hashcode="+socketChannel.hashCode());
socketChannel.pipeline().addLast(new JymNettyServerHandler());
}
});
シナリオの再説明
1.nettyは2組のスレッドプールを抽象化し、BossGroupはクライアント接続を担当し、WorkerGroupはネットワーク読み書き操作を担当する.NioEventLoopは、処理タスクを繰り返し実行するスレッドを表し、各NioEventLoopには、その上にバインドされたsocketネットワークチャネル3を傍受するselectorがある.NioEventLoop内部はシリアル化設計を採用し、繊細な読み書き、復号化、処理、符号化、送信から、常にIOスレッドのNioEventLoopが担当する
オブジェクトの前の関係
NioEventGroupの下に複数のNioEventLoopを含む各NioEventLoopには1つのSelectorが含まれており、1つのtaskQueue各NioEventLoopのselectorには複数のNioChannelを登録して傍受することができる各NioChannelは唯一のNioEventLoopにバインドされるだけである各NioChannelには1つの自分のChannelとPipelineがバインドされている
学習年限が足りなくて、知識が浅くて、言うことが間違っています.
世界には10種類の人がいて、1つはバイナリを知っていて、1つはバイナリを知らないのです.