当前位置: 首页 > news >正文

网站建设需求分析酒类宝安网站设计服务

网站建设需求分析酒类,宝安网站设计服务,网站建设的必要性,可不可以用p2p做视频网站Netty基本介绍,参考 Netty与网络编程 为了提高性能,Netty对锁也做了大量优化 1、锁优化技术 Netty大量使用了锁优化技术: 1.1 减小锁粒度1.2 减少锁对象的空间占用1.3 提高锁的性能1.4 根据不同业务场景选择合适锁1.5 能不用锁则不用锁 …

Netty基本介绍,参考 Netty与网络编程

为了提高性能,Netty对锁也做了大量优化

1、锁优化技术

Netty大量使用了锁优化技术:

  • 1.1 减小锁粒度
  • 1.2 减少锁对象的空间占用
  • 1.3 提高锁的性能
  • 1.4 根据不同业务场景选择合适锁
  • 1.5 能不用锁则不用锁

1.1 减小锁粒度

在Netty4.1.15.Final版本中ServerBootstrap.init方法中有两个地方对对象加锁,而不是在方法上加一个大锁,缩小了锁范围,如下图
在这里插入图片描述

1.2 减少锁对象的空间占用

源码ChannelOutboundBuffer类,如下图:

totalPendingSize是用来统计待发送字节数的,上面的TOTAL_PENDING_SIZE_UPDATER是AtomicLongFieldUpdater类型的,它实现对ChannelOutboundBuffer的totalPendingSize属性进行加锁累加,实现一个类似AtomicLong的功能。(下面的unwritable一样的道理)

在这里插入图片描述

那么为什么要这么做呢?为什么不直接使用AtomicLong来定义totalPendingSize?

为了节省空间

AtomicLong  VS  long + AtomicLongFieldUpdater(帮助long完成原子操作)
类型占用空间
AtomicLong对象头16B + 8B数据 + 8引用 =至少32B
long8B
直接使用long,节省20多个字节,虽然很少,但是作为一个网络工具,在大流量的情况下可以节省出很多空间,还是很有意义的

1.3 提高锁性能

1.3.1 我们看一下PlatformDependent.LongCounter方法如何做的?

源码PlatformDependent,这个类里面有很多类似代码
在这里插入图片描述

该方法提供了一个Long类型的线程安全累加器,针对java版本8以后和8以前的提供的累加器不一样

1.8及后  LongAdder   VS  AtomicLong(1.8)

因为LongAdder是1.8版本开始增加的新的Long累加器,在高并发是性能要优于AtomicLong,所以1.8版本以后使用LongAdder

1.3.2 LongAdder和AtomicLong

  • AtomicLong 对Long类型进行原子读写
  • LongAdder将Long的值value分成若干个cell,高并发是对某个cell的值累加,可以同时对多个cell值进行累加,能支持更高的并发。需要取到value就对所有cell进行一次sum就可以了
    在这里插入图片描述

1.3.3 我们做一个简单的测试看一下LongAdder和AtomicLong的性能:

public class LongAdderTest {public static void main(String[] args) {testAtomicLongVSLongAdder(10, 10000);System.out.println("==================");testAtomicLongVSLongAdder(10, 200000);System.out.println("==================");testAtomicLongVSLongAdder(100, 200000);}//AtomicLong与LongAdder多线程并发模拟及耗时统计static void testAtomicLongVSLongAdder(final int threadCount, final int times) {try {long start = System.currentTimeMillis();testLongAdder(threadCount, times);long end = System.currentTimeMillis() - start;// System.out.println("条件>>>>>>线程数:" + threadCount + ", 单线程操作" + times);System.out.println("LongAdder--count" + (threadCount * times) + ",time:" + end);long start2 = System.currentTimeMillis();testAtomicLong(threadCount, times);long end2 = System.currentTimeMillis() - start2;System.out.println("Atomic--count" + (threadCount * times) + ",time:" + end2);} catch (InterruptedException e) {e.printStackTrace();}}//使用AtomicLong模拟i++多线程并发:threadCount线程数、times每个线程运行多少次static void testAtomicLong(final int threadCount, final int times) throws InterruptedException {CountDownLatch countDownLatch = new CountDownLatch(threadCount);//发令枪:确保多线程同时运行AtomicLong atomicLong = new AtomicLong();for (int i = 0; i < threadCount; i++) {new Thread(new Runnable() {@Overridepublic void run() {for (int j = 0; j < times; j++) {atomicLong.incrementAndGet(); //++操作}countDownLatch.countDown();}}, "my-thread" + i).start();}countDownLatch.await();}//使用LongAdder模拟i++多线程并发:threadCount线程数、times每个线程运行多少次static void testLongAdder(final int threadCount, final int times) throws InterruptedException {CountDownLatch countDownLatch = new CountDownLatch(threadCount);LongAdder longAdder = new LongAdder();for (int i = 0; i < threadCount; i++) {new Thread(new Runnable() {@Overridepublic void run() {for (int j = 0; j < times; j++) {longAdder.add(1);//是原子操作,多线程安全  //++操作}countDownLatch.countDown();}}, "my-thread" + i).start();}countDownLatch.await();}
}

运行结果

如下图,高并发情况下LongAdder性能显著高于AtomicLong
在这里插入图片描述

1.4 根据不同的业务场景选择合适的锁

SingleTreadEventExecutor中定义了Atomic…类型、CountDownLatch形式的锁在不同的地方使用
在这里插入图片描述

1.5 能不用锁就不用锁

我们Netty源码的Recycler类里面有一个属性threadLocal,他是FastThreadLocal类型,该来对jdk提高的ThreadLocal做了一层包装,该类有一个虚方法onRemoval,使用该类必须实现这个方法,避免内存泄露。

ThreadLocal是线程私有的,使用这个东西可以避免线程操作共享变量的并发竞争。
在这里插入图片描述

总结

从上面的讨论的五种锁优化技术可以看出来,Netty对锁的优化可以说做到极致,各种场景下都对锁的优化有大量使用,这也是Netty高性能的一个重要原因,这些值得我们学习在项目中使用。

http://www.yayakq.cn/news/913812/

相关文章:

  • 怎么查网站死链接wordpress可视化采集
  • 电影网站盗链怎么做wordpress内容汉化
  • 这么自己建设网站wordpress手机编辑器插件下载
  • 孝感市建设网站儿童编程教学入门教程
  • 网站搭建一般要北京网站建设认知
  • 中国十大网站建设公司seo教程论坛
  • 温州 建网站wordpress模板媒体
  • 没有网站怎么做链接视频播放器建设一个有影响力的网站
  • 京东网站 用什么做的青岛模版网站建设
  • 做58一样的网站旅游网站建设需求分析
  • 学做面包网站wordpress用户组
  • 帝国cms 企业网站平面设计的创意手法有哪些
  • 网站备案怎么这么麻烦永康公司网站建设
  • 网站网站做员工犯法吗2022年国际国内重大新闻
  • 电子商务网站建设的过程wordpress 进销存主题
  • 做外贸都做哪些网站好免费下载怎么做同学录的网站
  • 做网站的公司好坑啊泰州网站制作软件
  • 如何建立游戏网站石家庄商标设计公司
  • 东莞微网站建设报价wordpress安装 用户名已存在
  • 在上海卖商铺做哪个网站好网站开发遇到的最大困难
  • 电商网站建设的目标seo云优化下载
  • 企业网站开发外包公司邢台织梦模板建站
  • 网站网络营销怎么做响应式网站建设智能优化
  • 还有哪些数据库网站网站如何备案
  • 上海正规做网站公司报价怎么注册公司名字
  • 织梦网站图片一直转圈网站的必要性
  • php建设网站所用开发软件小程序技术开发公司
  • visual stdio 做网站 注册用户 密码必须6位以上江西seo公司
  • wordpress 中文企业深圳做网站优化费用
  • 可登录的网站有哪些上海最新新闻头条