Netty 思想

本文介绍了Netty作为JavaNIO框架的异步特性,涉及EventLoop、EventLoopGroup、线程池以及Channel的事件处理机制。同时提到通过阅读源码和实践自己编写Netty来加深理解,特别是其内存池管理和jemalloc算法的应用。
摘要由CSDN通过智能技术生成

1,Netty 是一个 Java NIO 同步非阻塞框架,它底层封装了 Java NIO 的 Channel, Selector, SelectKey,便于用户使用 Java NIO 编程。但它的所有的 IO 操作都是异步的,全是各种 Future,Promise(Promise也是一种特殊的Future),因为 jdk 1.5 的 Future 没有事件监听功能,所以Netty 自己实现的 Future 具有事件监听回调,这是常规的异步操作,jdk 1.8 有了 CompleteFuture ,就不需要自己手动实现异步监听回调了,非常方便。

2,Java 里的异步操作,底层基本上都是通过线程池去实现的,因为新开一个线程去执行任务,其实就是最基本的异步操作。而 Netty 也不例外,但 Channel 有事件需要处理时,它就使用 EventLoop 去执行。Channel ,EvenLoop,Thread 的关系如下:

一个EventLoopGroup包含一个或者多个EventLoop。
一个EventLoop在它的生命周期内只和一个Thread绑定。
所有由EventLoop处理的I/O事件都将在它专有的Thread上被处理。
一个Channel在它的生命周期内只注册于一个EventLoop。
一个EventLoop可能会被分配给一个或多个Channel。 


此外还有Channel内部的数据处理流程,Channel 内部的数据结构。Channel 里是通过一个双向链表来处理事件的,和责任链模式差不多。

3,当我们学会使用了 Netty 并想更深入理解它的时候,可以在网上查找相关的 手写Netty 博客和项目,可以加深我们对Netty的理解。要知道Netty 是很复杂的,另外Netty还有一部分代码是内存池管理的,作者实现了 jemalloc 算法去管理线程池,这个理解起来确实挺困难的。

netty源码看不懂?试着写一个吧 - 简书

GitHub - LightMingMing/tiny-netty: 自己动手写netty

GitHub - pq217/netty-parody: 学习netty,仿写netty,手写netty

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值