Netty的那些”锁”事
Netty锁事的五个关键点:
① 在意锁的对象和范围 --> 减少粒度
② 注意锁的对象本身大小 --> 减少空间占用
③ 注意锁的速度 --> 提高速度
④不同场景选择不同的并发类 -->因需而边
⑤衡量好锁的价值 --> 能不用则不用
接下来按个看看:
①:在Netty的ServerBootstrap中的init():

上图不难看出来,多处使用了synchronized(){},而并非在inti方法上使用synchronized,如果这么做那么锁的对象就是这个实例,锁的范围则是大括号方法的范围,但是实际上我们不需要这么做,只是把Synchronized method -->Synchronized block,针对上图不同的属性,我们可以分别做锁,这样就减少了锁的范围。
②:例在ChannelOutboundBuffer中有这样的代码:

这个totalPendingSize是统计待发送的字节数

这样的两个步骤直接使用原子类就能完成,为什么不用原子类而是用了两个较为复杂的方式完成!这里可以参考https://www.cnblogs.com/-qilin/p/11725861.html
③例记录内存分配字节数等功能用到的LongCounter,在PlatformDependent的newLongCounter()中

上图的代码就是筛选jdk版本然后有不同的返回类型,如果大于等于8则是LongAdderCounter;而LongAdderCounter继承java.util.concurrent.atomic.LongAdder;
package io.netty.util.internal;
import java.util.concurrent.atomic.LongAdder;
final class LongAdderCounter extends LongAdder implements LongCounter {
@Override
public long value() {
return longValue();
}
}
高并发时:java.util.concurrent.atomic.AtomicLong ->java.util.concurrent.atomic.LongAdder,特定场景下是优于AtomicLong ;
我只想做的更好,仅此而已
Netty的那些”锁”事的更多相关文章
- Java并发(九)【转载】不可不说的Java“锁”事
转载自 美团技术团队,原文链接 不可不说的Java“锁”事 前言 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率.本文旨在对锁相关源码(本文中的源码来自JDK ...
- 你用对锁了吗?浅谈 Java “锁” 事
每个时代,都不会亏待会学习的人 大家好,我是yes. 本来打算继续写消息队列的东西的,但是最近在带新同事,发现新同事对于锁这方面有一些误解,所以今天就来谈谈"锁"事和 Java 中 ...
- 不可不说的Java“锁”事
前言 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率.本文旨在对锁相关源码(本文中的源码来自JDK 8).使用场景进行举例,为读者介绍主流锁的知识点,以及不同的 ...
- Netty连接处理那些事
编者注:Netty是Java领域有名的开源网络库,特点是高性能和高扩展性,因此很多流行的框架都是基于它来构建的,比如我们熟知的Dubbo.Rocketmq.Hadoop等,针对高性能RPC,一般都是基 ...
- 透过“锁”事看InnoDB对并发的处理?
一. 并发场景下的问题 相对于串行处理方式,并发的事务处理可显著提升数据库的事务吞吐量.提高资源利用率.在MySQL实际应用中,根据场景的不同,可以分为以下几类: 读读并发 读写并发 写写并发 在这些 ...
- Netty Pipeline与ChannelHandler那些事
Pipeline和ChannelHandler是Netty处理流程的重要组成部分,ChannelHandler对应一个个业务处理器,Pipeline则是负责将各个ChannelHandler串起来的& ...
- 彻底搞懂 netty 线程模型
编者注:Netty是Java领域有名的开源网络库,特点是高性能和高扩展性,因此很多流行的框架都是基于它来构建的,比如我们熟知的Dubbo.Rocketmq.Hadoop等.本文就netty线程模型展开 ...
- Netty中ByteBuf的引用计数线程安全的实现原理
原文链接 Netty中ByteBuf的引用计数线程安全的实现原理 代码仓库地址 ByteBuf 实现了ReferenceCounted 接口,实现了引用计数接口,该接口的retain(int) 方法为 ...
- java 并发(六) --- 锁
阅读前阅读以下参考资料,文章图片或代码部分来自与参考资料 概览 一张图了解一下java锁. 注 : 阻塞将会切换线程,切换内核态和用户态,是比较大的性能开销 各种锁 为什么要设置锁的等级 ...
随机推荐
- SSH 中文乱码解决
在终端执行命令:export LC_ALL=zh_CN.GB2312;export LANG=zh_CN.GB2312是最有效的. 这种方法是临时的,只对当前SSH客户端有效,重启后依然乱码. 1.不 ...
- 0079 Ehcache 3.x应用入门及通过JCache与Spring整合
基本要素:版本.概念与抽象 Ehcache 3.x是一个用Java语言实现的缓存库,并且实现了 JSR107规范 Ehcache从2.x升级到3.x后,Maven依赖从 net.sf.ehcache: ...
- Django基础之render()
结合一个给定的模板和一个给定的上下文字典, 并返回一个渲染后的HttpResponse对象. 参数: request: 用于生成响应的请求对象 template_name: 要使用的模板的完整名称, ...
- Codeforces 808 E. Selling Souvenirs(三分)
E. Selling Souvenirs 题意: n件物品,有重量和价值,重量只有三种1,2,3.问取不超过m重量的物品的价值总和最大是多少.(n<=1e5,w<=3e5) 思路: n*w ...
- 使用<bind>元素创建变量
在使用模糊查询sql时,如果使用${}进行字符拼接,无法防止sql诸如问题,如果使用concat函数则只对mysql有效果,用Oracle则需要用连接符||,这样在数据库变的时候需要修改,不利于移植. ...
- 【Makefile】Makefile中的赋值符号=、:=、?=、+=
Makefile中主要有四个赋值符号: = 是最基本的赋值:= 是覆盖之前的值?= 是如果没有被赋值过就赋予等号后面的值+= 是添加等号后面的值 1.“=” “=”赋值:make会将整个makefil ...
- easyUI之window窗口
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...
- Mybatis 联合查询XML与注解对比
由于是练习,故只做了感兴趣的一部分测试. 测试类容XML配置转注解方式 实体类为了测试请忽略设计是否合理… User.java @Alias("User")public class ...
- Neither BindingResult nor plain target object for bean name 'command' available as request attribute
最近用JSR303在表单提交时使用Java Bean Validation验证数据.报错堆栈如下: java.lang.IllegalStateException: Neither BindingRe ...
- reduce过滤数组
原始数据 const data = [{ id: , spec: '规格1', rules: [{ rank: , breaks: }, { rank: , breaks: }, { rank: , ...