netty、nio
关键词:netty、nio、零拷贝
热血吊车尾~
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
nio处理写事件的坑和正确做法
nio写事件转载 2022-11-28 16:12:33 · 310 阅读 · 0 评论 -
nio ByteBuffer和netty ByteBuf
netty原创 2022-11-14 16:14:22 · 317 阅读 · 0 评论 -
nio epoll空轮询bug与netty的解决方案
epoll空轮询原创 2022-11-13 16:06:21 · 540 阅读 · 0 评论 -
netty select poll epoll的区别
netty select poll epoll的区别原创 2022-11-13 15:34:35 · 498 阅读 · 0 评论 -
netty代码流程详解
netty源码分析原创 2022-11-13 09:15:13 · 220 阅读 · 0 评论 -
netty ChannelOption.SO_BACKLOG参数详解
SO_BACKLOG属于 ServerSocketChannal 参数第一次握手,client 发送 SYN 到 server,状态修改为 SYN_SEND,server 收到,状态改变为 SYN_REVD,并将该请求放入 sync queue 队列第二次握手,server 回复 SYN + ACK 给 client,client 收到,状态改变为 ESTABLISHED,并发送 ACK 给 server第三次握手,server 收到 ACK,状态改变为 ESTABLISHED,将该请求从原创 2021-10-30 22:21:57 · 2159 阅读 · 0 评论 -
netty 粘包和拆包产生现象分析
粘包现象,发送 abc def,接收 abcdef原因应用层:接收方 ByteBuf 设置太大(Netty 默认 1024)滑动窗口:假设发送方 256 bytes 表示一个完整报文,但由于接收方处理不及时且窗口大小足够大,这 256 bytes 字节就会缓冲在接收方的滑动窗口中,当滑动窗口中缓冲了多个报文就会粘包Nagle 算法:会造成粘包半包现象,发送 abcdef,接收 abc def原因应用层:接收方 ByteBuf 小于实际发送数据量滑动窗口:假设接收方的窗口只剩原创 2021-10-30 22:14:07 · 180 阅读 · 0 评论 -
netty 直接内存VS堆内存以及池化VS非池化
2)直接内存 vs 堆内存可以使用下面的代码来创建池化基于堆的 ByteBufByteBuf buffer = ByteBufAllocator.DEFAULT.heapBuffer(10);也可以使用下面的代码来创建池化基于直接内存的 ByteBufByteBuf buffer = ByteBufAllocator.DEFAULT.directBuffer(10);直接内存创建和销毁的代价昂贵,但读写性能高(少一次内存复制),适合配合池化功能一起用直接内存对 GC 压力小,因为这部分内存原创 2021-10-30 22:11:25 · 1419 阅读 · 1 评论 -
nio与io模型
5. NIO vs BIO5.1 stream vs channelstream 不会自动缓冲数据,channel 会利用系统提供的发送缓冲区、接收缓冲区(更为底层)stream 仅支持阻塞 API,channel 同时支持阻塞、非阻塞 API,网络 channel 可配合 selector 实现多路复用二者均为全双工,即读写可以同时进行5.2 IO 模型同步阻塞、同步非阻塞、同步多路复用、异步阻塞(没有此情况)、异步非阻塞同步:线程自己去获取结果(一个线程)异步:线程自己不去获取结果原创 2021-10-30 10:37:52 · 122 阅读 · 0 评论 -
nio 零拷贝详解
传统 IO 问题传统的 IO 将一个文件通过 socket 写出File f = new File("helloword/data.txt");RandomAccessFile file = new RandomAccessFile(file, "r");byte[] buf = new byte[(int)f.length()];file.read(buf);Socket socket = ...;socket.getOutputStream().write(buf);内部工作流程是原创 2021-10-30 10:33:49 · 225 阅读 · 0 评论 -
nio selector的server端和client端代码简单实现
public class SelectorServerDemo { public static void main(String[] args) throws IOException { //1、创建selector,管理多个channel Selector selector = Selector.open(); ServerSocketChannel ssc = ServerSocketChannel.open(); ssc.con原创 2021-10-28 22:45:59 · 278 阅读 · 0 评论 -
netty实战博客参考地址
netty实战博客参考地址原创 2021-10-24 16:55:45 · 80 阅读 · 0 评论 -
netty的handler调用链机制
ChannelHandlerContext调用链(HeadContext、TailContext也是ChannelHandlerContext,ChannelHandlerContext内部维护了next和prev):入站:DefaultChannelPipelineHeadContext(内部无handler引用)−−>DefaultChannelHandlerContext(TestServerInitializer(ChannelInitializer也是handler))−−>Defa原创 2021-10-24 14:26:37 · 220 阅读 · 0 评论 -
netty的jar包依赖
<dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.43.Final</version></dependency>原创 2021-10-23 23:07:48 · 1799 阅读 · 0 评论 -
线程模型:单Reactor单线程、单Reactor多线程、主从Reactor多线程、netty模型
1)Reactor模式:原理:一个或多个客户发送请求给服务器端处理器,服务器端处理器处理完请求后,使用IO复用监听事件,将请求同步发送给相应的线程。一个线程可以处理多个事件,执行非阻塞操作。(1)单Reactor单线程:服务器端用一个线程通过多路复用技术来搞定所有的IO操作。 例子:前面的群聊系统。 使用场景:客户端有限的情况下。 结合生活打个比喻:前台和服务员是同一个人,全程只服务一个客户。(2)单Reactor多线程:由reactor处理所有事件的原创 2021-10-23 21:51:38 · 656 阅读 · 0 评论 -
nio与零拷贝
nio与零拷贝转载 2021-10-23 18:25:34 · 95 阅读 · 0 评论
分享