自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 RabbitMQ入门-AMQP协议

   RabbitMQ和AMQP   AMQP生产者流转过程   AMQP消费者流转过程   RabbitMQ和AMQP     RabbitMQ遵从AMQP协议,AMQP的模型架构和RabbitMQ的模型架构是一样的,...

2020-03-11 11:14:46 372

原创 RabbitMQ入门-相关概念介绍

   生产者和消费者   队列   交换器、路由键、绑定   RabbitMQ运转流程   连接和信道   生产者和消费者     生产者:Producer...

2020-03-10 14:59:17 272

原创 Netty-流量整形注意事项

上一篇:流量整形工作机制   1. 并发编程在流量整形中的使用      1.1 volatile的使用      1.2 减小锁的范围      1.3 原子类 &n...

2020-03-06 10:17:27 717

原创 Netty-流量整形工作机制

   流量整形工作原理及源码分析      消息读取的流量整形      消息发送流量整形流量整形工作原理及源码分析     流量整形工作原理:拦截channelRead()和write()...

2020-03-05 10:25:27 1177

原创 Netty-流量整形实践

当系统负载压力比较大时,系统进入过负荷状态,可能是CPU、内存资源已经过载,也可能是应用进程内部的资源几乎耗尽,如果继续全量处理业务,可能会导致长时间的Full GC、消息严重积压或者应用进程宕机,最终将压力转移到集群中的其他节点,引起级联故障。通过动态流控,拒绝一定比例新接入的请求消息,可以保障系统不被压垮除了动态流控,有时候还需要对消息的读取和发送速度做控制,以便消息能以比较恒定的速度发送...

2020-03-03 11:00:31 1740 3

原创 Netty-NioEventLoop线程工作机制

   I/O读写操作原理   异步任务执行原理   定时任务执行原理I/O读写操作原理     NioEventLoop作为Reactor线程,负责TCP连接的创建和接入,以及TCP消息的读写,Reactor线程职责如下:作为NIO服务端,接受客...

2020-02-28 15:19:29 2005

原创 Netty-服务端接收不到客户端发送消息案例

得益于高性能、低时延的优势,Netty被广泛应用于物联网领域,用于海量终端设备的协议接入、消息收发和数据处理。当服务端出现性能瓶颈或者阻塞时,就会导致终端设备连接超时和掉线,引发各种问题,因此在物联网场景下,一定要防止服务端代码因为编码不当导致的意外阻塞,进而无法处理终端请求消息。   服务端接收不到客户端发送消息案例   堆...

2020-02-27 16:46:43 8232

原创 JAVA-文件操作工具类

文件操作工具类/******************************************** * 文件操作工具类 * * @author p.ww *********************************************/import java.io.*;import java.util.concurrent.ExecutorService;im...

2020-02-25 17:32:50 245

原创 Netty-DefaultEventExecutor工作机制

   DefaultEventExecutor源码   业务线程池优化策略   Netty线程绑定机制原理DefaultEventExecutor源码     DefaultEventExecutor是JDK线程池ExecutorService的一种...

2020-02-21 16:16:04 1684 1

原创 Netty-并发失效案例之DefaultEventExecutorGroup特性

为了提升性能,如果用户实现的ChannelHandler包含复杂或者可能导致同步阻塞的业务逻辑,往往需要通过线程池来提升并发能力,线程池添加有两种策略:用户自定义线程池执行业务ChannelHandler,以及通过Netty的EventExecutorGroup机制来并行执行ChannelHandler。   案例重现   无法...

2020-02-20 16:39:36 5230 2

原创 Netty-channelReadComplete方法多次触发问题

针对Channel上发生的各种网络操作,例如链路创建、链路关闭、消息读写等,Netty将这些消息封装成事件,触发ChannelPipeline调用ChannelHandler链,由系统或者用户实现的ChannelHandler对网络事件做处理。由于网络事件种类比较多,触发和执行机制也存在一些差异,如果掌握不到位很有可能发生一些莫名其妙的问题。channelReadComplete被多次调...

2020-02-17 15:46:17 9557

原创 线程池的三种阻塞队列

三种阻塞队列:   SynchronousQueue   ArrayBlockingQueue   LinkedBlockingQueueSynchronousQueue     无缓冲无界等待队列,超出核心线程个数的任务时,创建新的线程执行任务...

2020-01-28 00:39:47 2412

原创 线程池的4种拒绝策略

四种拒绝策略:   AbortPolicy   CallerRunsPolicy   DiscardPolicy   DiscardOldestPolicyAbortPolicy     默认拒绝策略,丢弃任务并触发...

2020-01-20 16:50:21 519

原创 Netty-ChannelHandler并发安全分析

ChannelHandler是Netty中使用最广的接口,Netty提供了大量内置的ChannelHandler实现类,包括编解码、SSL、日志打印等等。用户通过实现ChannelHandler接口,来接口和发送业务消息,并进行业务逻辑处理。   Netty ChannelHandler并发安全问题     ...

2020-01-15 16:09:08 2371

原创 Netty-发送队列积压导致内存泄漏

导致Netty内存泄漏的原因很多,如使用内存池方式创建的对象忘记释放,或者系统处理压力过大导致发送队列积压,尽管Netty采用NIO非阻塞通信,I/O处理往往不会成为业务瓶颈,但如果客户端并发压力过大,超过了服务端处理能力,又没有流控保护,则容易发生内存泄漏   高并发故障场景   内存泄漏原因分析  &n...

2020-01-14 09:52:21 2737

原创 Netty-消息发送工作机制

业务调用write后,经过ChannelPipeline职责链处理,消息被投递到消息发送缓冲区待发送,调用flush之后会执行真正的发送操作,底层通过调用Java NIO的SocketChannel进行非阻塞write操作,将消息发送到网络上。   WriteAndFlushTask原理和源码分析   ChannelOutbou...

2020-01-13 09:26:48 1540

原创 Netty-什么是串行无锁化?

为尽可能提升性能,Netty中有提到一个串行无锁化概念。什么是串行无锁化?     NioEventLoop维护了一个任务队列,队列在创建NioEventLoop时被初始化,是用来实现串行无锁化的载体。//SingleThreadEventExecutor类this.taskQueue = this.newTaskQueue(this...

2020-01-10 11:40:51 2581

原创 Netty-ByteBuf使用注意事项

根据一个具体案例来分析ByteBuf申请和释放时的线程并发安全问题和非法引用问题   HTTP响应Body获取时异常   ByteBuf非法引用问题HTTP响应Body获取时异常     HTTP客户端示例代码,采用同步HTTP调用方式:public class Http...

2020-01-08 18:04:10 1148 2

原创 Netty-ByteBuf实现机制

      应用在进行数据传输时,往往需要使用缓冲区,最常用的缓冲区就是JDK NIO类库提供的java.nio.Buffer。由于JDK原生的Buffer存在一些缺点,Netty提供了自己的ByteBuffer实现(ByteBuf类);      ByteBuf种类繁多,支...

2020-01-08 14:06:14 291

原创 Netty-内存池原理分析

作为高性能的NIO通信框架,性能优势是Netty的核心竞争力之一,自Netty4.x引入内存池机制后,Netty默认采用内存池模式创建ByteBuf对象,性能得到很大提升,GC压力也得到很大缓解。内存池原理分析    主要数据结构    Netty内存池内存的几种类型   &...

2020-01-06 20:42:19 808 1

原创 Netty-响应消息的释放

- 堆内存(PooledHeapByteBuf)会将HeapByteBuffer转换成DirectByteBuffer,并释放PooledHeapByteBuf到内存池。 //AbstractNioChannel protected final ByteBuf newDirectBuffer(ByteBuf buf){ final int readableBytes = buf.read...

2020-01-05 20:20:06 895

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除