IO&NIO&Netty

IO和NIO

传统IO是面向stream流的(同步),一个字节一个字节的处理;NIO是面向buffer块的(异步),以块的模式处理

NioEventLoopGroup

channel是对java底层socket的抽象

netty解决jdk的epoll空轮训

如果每次轮询消耗的时间为 0,且重复次数超过 512 次,则调用 rebuildSelector()方法,即重构 Selector

创建一个新的 Selector
将原来 Selector 中注册的事件全部取消
将可用事件重新注册到新的 Selector 中,并激活

pipeline

head是ChannelInboundHandler,tail是ChannelOutboundHandler
每一个元素都是ChannelHandler,通过fire方法不断向后传递

ByteBuf

Netty 中所有的内存申请是以 Chunk 为单位向内存申请的,大小为 16M,后续的所有内 存分配都是在这个 Chunk 里面的操作。8K 对应的是一个 Page,一个 Chunk 会以 Page 为单位进行切分,8K 对应 Chunk 被划分为 2048 个 Page。
通过direct内存和零拷贝提高效率
ByteBufAllocator做内存分配:DirectBuf/HeapBuf * PooledBuf/UnpooledBuf * UnsafeBuf/非UnsafeBuf(系统支持UnsafeBuffer就优先UnsafeBuffer)
为了尽量重用缓冲区,减少垃圾回收,Netty提供了基于内存池的缓冲区重用机制,性能提高20倍。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。