netty框架教学,netty框架工作原理

首页 > 实用技巧 > 作者:YD1662024-02-21 13:48:53

2 Java 原生 NIO API 从入门到放弃

复杂度高

稳定性差,坑多且深

NIO代码实现方面的一些缺点

1)Selector.selectedKeys() 产生太多垃圾

Netty 修改了 sun.nio.ch.SelectorImpl 的实现,使用双数组代替 HashSet 存储来 selectedKeys:

Nio 的代码到处是 synchronized (比如 allocate direct buffer 和 Selector.wakeup() ):

2)fdToKey 映射

3)Selector在linux 平台是 Epoll LT 实现

4)Direct Buffers 事实上还是由 GC 管理

五 Netty 的真实面目

1 Netty 中几个重要概念及其关系

EventLoop

Boss: mainReactor 角色,Worker: subReactor 角色

2 Netty4 Thread Model

netty框架教学,netty框架工作原理(17)

3 ChannelPipeline

netty框架教学,netty框架工作原理(18)

4 Pooling&reuse

PooledByteBufAllocator

Recycler

5 Netty Native Transport

相比 Nio 创建更少的对象,更小的 GC 压力。

针对 linux 平台优化,一些 specific features:

6 多路复用简介

select/poll

epoll

7 稍微深入了解一点 Epoll

LT vs ET

概念:

可读:

可写:

图解:

netty框架教学,netty框架工作原理(19)

epoll 三个方法简介

1)主要代码:linux-2.6.11.12/fs/eventpoll.c

2)int epoll_create(int size)

创建 rb-tree(红黑树)和 ready-list (就绪链表):

3)int epoll_ctl(int epfd,int op,int fd,struct epoll_event *event)

4)int epoll_wait(int epfd,struct epoll_event * events,int maxevents,int timeout)

epoll 的数据结构

netty框架教学,netty框架工作原理(20)

上一页12345下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.