我自己对于Netty的疑问

在上一篇文章《揭秘ServerBootstrap神秘面纱(服务端ServerBootstrap)》中我们提出了这些问题,有点还没有解答,这篇文章专门对它们进行解答。

  1. 服务端openServerSocketChannel()和客户端openSocketChannel()的区别?
  2. 服务端newSafe()和客户端newSafe()有什么不一样?
  3. 服务端Channel的传入参数是OP_ACCEPT,客户端是OP_READ。
  4. EventLoopGroup和EventLoop之间的关系是什么?
  5. 到底什么是多路复用?
  6. 什么是reactor模式?
  7. redis 是reactor单线程模式?
  8. reactor模式有三种,我们现在的demo用的是主从模式,还是多线程
  9. bossGroup和workGroup分别是在哪关联的
  10. ServerBootstrapAcceptor的作用?
  11. childLoop如何绑定请求过来的channel
  12. 我们知道selector轮询服务端是轮询的,客户端轮询吗?
  13. 服务端特有参数:
    childHandler / childOption / childAttr 方法(只有服务端ServerBootstrap才有child类型的方法)。
    ——对于服务端而言,有两种通道需要处理, 一种是ServerSocketChannel:用于处理用户连接的accept操作, 另一种是SocketChannel,表示对应客户端连接。而对于客户端,一般都只有一种channel,也就是SocketChannel。客户端和服务端使用的都是NioEventLoop吗?服务端workGroup中的EventLoop是可以绑定客户端来的Channel,那客户端的EventLoop是用来干啥的?
  14. 三种reactor模型的区别:
    单线程:acceptor和nio共用一个线程
    多线程:acceptor是单个线程,nio是一个线程池
    主从:acceptor是线程池,nio也是线程池
  15. selector的for循环部分,是我们所说的select、epoll中的select模式的代码实现吗?

目录

 一、 服务端openServerSocketChannel()和客户端openSocketChannel()的区别?

二、服务端newSafe()和客户端newSafe()有什么不一样?

三、服务端Channel的传入参数是OP_ACCEPT,客户端是OP_READ。

四、EventLoopGroup和EventLoop之间的关系是什么?

五、到底什么是多路复用?

六、什么是reactor模式?

七、redis 是reactor单线程模式?

八、reactor模式有三种,我们现在的demo用的是主从模式,还是多线程?

九、bossGroup和workGroup分别是在哪和channel关联的

十、ServerBootstrapAcceptor的作用?

十一、childLoop如何绑定请求过来的channel

十二、我们知道selector轮询服务端是轮询的,客户端轮询吗?

十三、服务端特有参数:

十四、三种reactor模型的区别:

十五、selector的for循环部分,是我们所说的select、epoll中的select模式的代码实现吗?


 

 一、 服务端openServerSocketChannel()和客户端openSocketChannel()的区别?

openSocketChannel()最终创建的是SocketChannelImpl对象

openServerSocketChannel()最终创建的是ServerSocketChannelImpl对象:

总结:openSocketChannel()和openServerSocketChannel(),不同之处也很简单,就是两者创建的对象不一样,openSocketChannel()最终创建的是SocketChannelImpl对象,openServerSocketChannel()最终创建的是ServerSocketChannelImpl对象。

二、服务端newSafe()和客户端newSafe()有什么不一样?

不同之处在上面文章中其实有所讲解,将内容截下来了:

三、服务端Channel的传入参数是OP_ACCEPT,客户端是OP_READ。

结论就是标题。

四、EventLoopGroup和EventLoop之间的关系是什么?

EventLoopGroup 是一组 EventLoop 的抽象,一个 EventLoopGroup 当中会包含一个或多个 EventLoop,EventLoopGroup 提供 next 接口,可以从一组 EventLoop 里面按照一定规则获取其中一个 EventLoop 来处理任务。

五、到底什么是多路复用?

.I/O复用模型:

1.select/poll

老李去火车站买票,委托黄牛,然后每隔6小时电话黄牛询问,黄牛三天内买到票,然后老李去火车站交钱领票。
耗费:往返车站2次,路上2小时,黄牛手续费100元,打电话17次

2.epoll

老李去火车站买票,委托黄牛,黄牛买到后即通知老李去领,然后老李去火车站交钱领票。
耗费:往返车站2次,路上2小时,黄牛手续费100元,无需打电话

详细请参考:I/O多路复用是什么意思?

IO多路复用,同步,异步,阻塞和非阻塞 区别(转)

六、什么是reactor模式?

 Reactor 模式 

是一种为处理服务请求并发,提交到一个或者多个服务处理程序的事件设计模式。当请求抵达后,服务处理程序使用解多路分配策略,然后同步地派发这些请求至相关的请求处理程序
(来自维基百科:https://zh.wikipedia.org/wiki/反应器模式)

常见的reactor模式有以下三种

  1. 单线程reactor
  2. 多线程reactor
  3. 主从reactor

详细请看下列两篇文章:

Netty 线程模型与Reactor 模式 

Netty源码死磕一(netty线程模型及EventLoop机制)

七、redis 是reactor单线程模式?

Redis的线程模型和事务

八、reactor模式有三种,我们现在的demo用的是主从模式,还是多线程?

我们demo中使用的是主从模式,因为我们设置了bossGroup和workGroup,设置了这两个则是使用主从模式。

九、bossGroup和workGroup分别是在哪和channel关联的

bossGroup负责连接,workGroup负责处理I/O请求;

bossGroup与channel关联:

workGroup与channel关联:

十、ServerBootstrapAcceptor的作用?

在ServerBootstrapAcceptor中重写了channelRead()方法。如上面第九条,它就是用来将workerGroup绑定channel的。

十一、childLoop如何绑定请求过来的channel

这里有一篇关于“Netty新连接接入”接入的文章:http://www.bubuko.com/infodetail-2697108.html

十二、我们知道selector轮询服务端是轮询的,客户端轮询吗?

客户端demo以及追踪源码目前来看是没有select()的,另外select()这个方法不是一直轮询的,而是阻塞方法。

select不是轮询。只是有数据时,会依次处理有数据的fd。没有数据的fd不被处理。

十三、服务端特有参数:

childHandler / childOption / childAttr 方法(只有服务端ServerBootstrap才有child类型的方法)。
——对于服务端而言,有两种通道需要处理, 一种是ServerSocketChannel:用于处理用户连接的accept操作, 另一种是SocketChannel,表示对应客户端连接。而对于客户端,一般都只有一种channel,也就是SocketChannel。客户端和服务端使用的都是NioEventLoop吗?服务端workGroup中的EventLoop是可以绑定客户端来的Channel,那客户端的EventLoop是用来干啥的?

十四、三种reactor模型的区别:

单线程:acceptor和nio共用一个线程
多线程:acceptor是单个线程,nio是一个线程池
主从:acceptor是线程池,nio也是线程池

十五、selector的for循环部分,是我们所说的select、epoll中的select模式的代码实现吗?

https://www.cnblogs.com/cbam/p/11816453.html

https://blog.csdn.net/lsgqjh/article/details/86622532

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值