《Netty in action》《Netty 实战》学习笔记

Netty in action学习笔记

1.Netty——异步和事件驱动

# 查看本地线程栈大小,我本地是8192,即8M,进程栈不会大于线程栈的2倍
ulimit -s
  • 异步和可伸缩性,是netty的特色,正因为一步,所以才提高了可伸缩性

  • future虽好,但是缺乏了事件通知机制,导致我们不得不手动检查或者一直阻塞到事件完成,ChannelFuture通过注册一个或多个ChannelFutureListener实例,实现了事件监听

  • 因为netty是异步的,所以Channel的操作会返回ChannelFuture,一点也不奇怪,而channelFuture又支持能够直接获取channel,

2.你的第一款应用程序

OioEventLoopGroup还不太理解

答:阻塞传输

channelRead0是SimpleChannelInboundHandler类的

3.Netty的组件和设计

Channel是注册到Event Loop上的,一个channel在它的生命周期内只注册一个EventLoop,一个EventLoop在它的生命周期内之和一个Thread绑定。

但是反过来,一个Thread对应多个EventLoop,一个EventLoop可能会被分配给一个或者多个Channel。

这样的设计,共享线程资源,又避免了channel的线程间数据共享。

4.传输

socket是用来干啥的

进行客户端与服务端传输的,

创建socket你需要干什么

绑定端口号

channel是线程安全的,在多线程环境下,可以使用同一个线程写数据。

netty支持的传输

  • nio
  • epoll
  • oio
  • local
  • embedded

5.ByteBuf

直接缓冲区的缺点:分配和释放都比较昂贵

代码层面的理解,你需要分配一个新的数组,然后将数据copy到直接缓冲区

我们可以认为,直接缓冲区比非直接缓冲区的速度快一点,但是这个速度差距不会非常大,通常在1.5倍以内,也就是说,差距不会大于50%,而且,这个数据会因为测试出现一定的随机性,大小关系可能发生变化。

缓冲区的分类
  • 堆缓冲区(非直接缓冲区)
  • 直接缓冲区
  • 复合缓冲区(jdk ByteBuffer所不具备的)

英文学习

composite:复合的,复合型

6.ChannelHandler和ChannelPipeline

channel的生命周期形态顺序

ChannelRegistered——》ChannelActive——》ChannelInactive——》ChannelUnregistered

ChannelPromise配合ChannelOutboundHandler使用,定义了一些可写的方法,保证ChannelFuture不可变。

7.EventLoop和线程模型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值