Netty
文章平均质量分 85
Netty学习
爱欧米
这个作者很懒,什么都没留下…
展开
-
1、netty百万连接设计及优化
理论上系统内存有多少就可以打开多少的文件描述符,但是在实际中内核是会做相应的处理,一般最大打开文件数会是系统内存的10%(以KB来计算),称之为系统级限制。这个数字可以通过 cat /proc/sys/fs/file-max 或者 sysctl -a | grep fs.file-max 命令查看。:用户打开文件描述符默认是1024,文件描述符范围1-65535,这个数字可以通过 ulimit -n查看,可以在65535范围内调整。原创 2023-02-22 09:51:41 · 3446 阅读 · 0 评论 -
2、netty适合场景
Netty是业界最流行的NIO框架之一,它的健壮性、功能、性能、可定制性、可扩展性在同类框架中都是首屈一指的,它已经在很多项目、中间件实战得到证明,他们也是用netty构建异步通讯能力的程序。例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常码流的处理等等,NIO编程的特点是功能开发相对容易,但是可靠性能力补齐工作量和难度都非常大;netty适合多对一场景,并发不是很高的场景,如果并发高通讯会被阻塞,被阻塞原因是客户端通讯是单线程模型。多客户端、一组服务端,客户端高并发通讯。原创 2022-11-09 17:00:25 · 377 阅读 · 0 评论 -
2、linux IO模型分析
IO名词面对对象区别同步IO会阻塞用户进程进程触发IO操作是否会阻塞用户进程,用户的cup此时是否释放,所以同步异步针对的是用户进程异步IO不会阻塞用户进程阻塞用户进程需等待内核copy数据到用户空间的过程触发read()操作后,系统内核是否会立刻返回状态还是等待, 所以阻塞非阻塞是针对操作系统内核。非阻塞用户进程不需等待内核copy数据到用户空间的过程系统在读写的时候参与方可能有 cup、内存、硬盘、网卡、显卡等等外接设备,分析过程发现三个特点这个读写过程都有经过操作系统内核。原创 2022-11-09 17:06:17 · 599 阅读 · 0 评论 -
3、Nio源码
简单来讲, Selector会不断地轮询注册在其上的Channel,如果某个Channel上面发生读或者写事件, 这个Channel就处于就绪状态,会被Selector轮询出来,然后通过SelectionKey可以获取就绪Channel的集合,进行后续的IO操作。通 道 与 流 的 不 同 之 处 在 于 通 道 是 双 向 的,流只是在一个方向上移 动( 一 个 流 必 须 是 Inputstream或者OutpulStream的子类),而通道可以用于读、写或者一者同时进行。我调试没有调试出结果。原创 2022-11-09 17:15:53 · 767 阅读 · 0 评论 -
4、Netty 线程模型
netty其实就是一个单线程、多线程的外壳,包裹这jdk的 bio、nio实现。bio虽然是同步阻塞io,但是如果有多线程支持一样的可以做到同时支持多个客户端。nio天生就支持多个客户端,netty将接受请求线程、工作线程分开处理。boss线程池创建打开select监听, NioEventLoop继承多线程ScheduledExecutorService,在run方法实现了获取nio selectKey状态的方法processSelectedKeys.后续调read()封装ByteBuf在保存在堆外内存.原创 2022-11-09 17:34:32 · 778 阅读 · 0 评论 -
5、NIO-Bytebuffer内存结构
因为文件读写、网络通讯等数据都是以流的形式一点点到目的地的,所以需要一个缓冲区承接流.缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对输入/输出(I/O)的数据作临时存储,这部分预留的内存空间就叫做缓冲区.举个简单的例子,比如A地有1w块砖要搬到B地,由于没有工具(缓冲区),我们一次只能搬一本,那么就要搬1w次(实际读写次数),如果A,B两地距离很远的话(IO性能消耗),那么性能消耗将会很大,但是要是此时我们有辆大卡车(缓冲区),一次可运5000本,那么2次就够了,相比之前,性能肯定是大大提高原创 2022-11-09 17:46:26 · 486 阅读 · 0 评论 -
6、Netty ByteBuf工作原理
特点是内存的分配和回收速度快,可以被 JVM自动回收;缺点就是如果进行Socket的I/O读写,需要额外做一次内存复制,将堆 内存对应的缓冲区复制到内核Channel中,性能会有一定程度的下降。非堆内存,它在堆外进行内存分配,相 比于堆内存,它的分配和回收速度会慢一些,但是将它写入或者从Socket Channel中读取 时,由于少了一次内存复制,速度比堆内存快。正是因为各有利弊,所以Netty提供了多种ByteBuf供开发者使用,经验表明,ByteBuf 的最佳实践是在I/O通信线程的读写缓冲区使用Dir原创 2022-11-09 17:50:48 · 267 阅读 · 0 评论 -
7、Netty 调用链及设计模式及协议支持
netty服务端创建时序图原创 2022-11-09 17:56:14 · 274 阅读 · 0 评论 -
8、Netty核心组件介绍
基础的IO操作,如绑定、连接、读写等都依赖于底层网络传输所提供的原语,在Java的网络编程中,基础核心类是Socket,而Netty的Channel提供了一组API,极大地简化了直接与Socket进行操作的复杂性,并且Channel是很多类的父类,如EmbeddedChannel、LocalServerChannel、NioDatagramChannel、NioSctpChannel、NioSocketChannel等。Netty中的所有IO操作都是异步的,不会立即返回,需要在稍后确定操作结果。原创 2022-11-10 14:39:12 · 197 阅读 · 0 评论 -
9、EventLoop
Netty 高性能的奥秘在于其 Reactor 线程模型。EventLoop 是 Netty Reactor 线程模型的核心处理引擎,那么它是如何高效地实现事件循环和任务处理机制的呢?原创 2022-11-10 18:11:52 · 111 阅读 · 0 评论 -
10、EventloopGroup和EventLoop啥关系
在netty中不管是服务器端的ServerBootstrap还是客户端的Bootstrap,在创建的时候都需要在group方法中传入一个EventLoopGroup参数,用来处理所有的ServerChannel和Channel中所有的IO操作和event。可能有的小伙伴还稍微看了一下netty的源码,可能会发现还有一个和EventLoopGroup非常类似的类叫做EventLoop。那么EventLoopGroup和EventLoop有什么关系呢?他们的底层和channel的交互关系是怎么样的呢?转载 2022-11-10 17:36:20 · 199 阅读 · 0 评论 -
12、Bootstrap和ServerBootstrap啥关系
Bootstrap是Netty提供的一个便利的工厂类,可以通过它来完成客户端或服务端的Netty初始化。先来看一个例子,从客户端和服务端分别分析Netty的程序是如何启动的。首先,从客户端的代码片段开始。复制上面的客户端代码虽然简单,但是展示了Netty客户端初始化时所需的所有内容。(1)EventLoopGroup:不论是服务端还是客户端,都必须指定EventLoopGroup。在这个例子中,指定了NioEventLoopGroup,表示一个NIO的EventLoopGroup。(2)Channel原创 2022-11-10 19:01:47 · 753 阅读 · 0 评论 -
100、网关详细设计文档
算法的思想是在2的32次方的范围将7200秒均匀分配在环上,当工控握手的时候会在环上获取一个时间点作为自己重启的时间点。长连接数写入元数据,方便后续做最小连接数上线算法,也可以获取机器在线的工控数量,让我们知道每台机器的负载情况。当工控握手的时候获取工控机的vemId的hashcode,在hash环上获取一个hash段,然后获取hash段的firstKey作为目标的key,取value就是工控重启的时间点。通过获取在线的服务节点上的长链接数,如果链接最多的节点的链接数比最少的多20%则触发控制。原创 2022-11-09 21:22:09 · 1267 阅读 · 0 评论