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

建立个人网站费用/网站很卡如何优化

建立个人网站费用,网站很卡如何优化,商业规划设计公司,wordpress的登录如果让你实现一个计数器,有点经验的同学可以很快的想到使用AtomicInteger或者AtomicLong进行简单的封装。 因为计数器操作涉及到内存的可见性和线程之间的竞争,而Atomic***的实现完美的屏蔽了这些技术细节,我们只需要执行相应的方法&#xf…

如果让你实现一个计数器,有点经验的同学可以很快的想到使用AtomicInteger或者AtomicLong进行简单的封装。

因为计数器操作涉及到内存的可见性和线程之间的竞争,而Atomic***的实现完美的屏蔽了这些技术细节,我们只需要执行相应的方法,就能实现对应的业务需求。

Atomic**虽然好用,不过这些的操作在并发量很大的情况下,性能问题也会被相应的放大。我们可以先看下其中getAndIncrement的实现代码

public final long getAndIncrement() {return unsafe.getAndAddLong(this, valueOffset, 1L);
}// unsafe类中的实现
public final long getAndAddLong(Object var1, long var2, long var4) {long var6;do {var6 = this.getLongVolatile(var1, var2);} while(!this.compareAndSwapLong(var1, var2, var6, var6 + var4));return var6;
}

很显然,在getAndAddLong实现中,为了实现正确的累加操作,如果并发量很大的话,cpu会花费大量的时间在试错上面,相当于一个spin的操作。如果并发量小的情况,这些消耗可以忽略不计。

既然已经意识到Atomic***有这样的业务缺陷,Doug Lea大神又给我们提供了LongAdder,内部的实现有点类似ConcurrentHashMap的分段锁,最好的情况下,每个线程都有独立的计数器,这样可以大量减少并发操作。

下面通过JMH比较一下AtomicLong 和 LongAdder的性能。

@OutputTimeUnit(TimeUnit.MICROSECONDS)
@BenchmarkMode(Mode.Throughput)
public class Main {private static AtomicLong count = new AtomicLong();private static LongAdder longAdder = new LongAdder();public static void main(String[] args) throws Exception {Options options = new OptionsBuilder().include(Main.class.getName()).forks(1).build();new Runner(options).run();}@Benchmark@Threads(10)public void run0(){count.getAndIncrement();}@Benchmark@Threads(10)public void run1(){longAdder.increment();}
}

1、设置BenchmarkMode为Mode.Throughput,测试吞吐量
2、设置BenchmarkMode为Mode.AverageTime,测试平均耗时

线程数为1

1、吞吐量

Benchmark   Mode  Cnt    Score   Error   Units
Main.run0  thrpt    5  154.525 ± 9.767  ops/us
Main.run1  thrpt    5   89.599 ± 7.951  ops/us

2、平均耗时

Benchmark  Mode  Cnt  Score    Error  Units
Main.run0  avgt    5  0.007 ±  0.001  us/op
Main.run1  avgt    5  0.011 ±  0.001  us/op

单线程情况:
1、AtomicLong的吞吐量和平均耗时都占优势

线程数为10

1、吞吐量

Benchmark   Mode  Cnt    Score     Error   Units
Main.run0  thrpt    5   37.780 ±   1.891  ops/us
Main.run1  thrpt    5  464.927 ± 143.207  ops/us

2、平均耗时

Benchmark  Mode  Cnt  Score   Error  Units
Main.run0  avgt    5  0.290 ± 0.038  us/op
Main.run1  avgt    5  0.021 ± 0.001  us/op

并发线程为10个时:

LongAdder的吞吐量比较大,是AtomicLong的10倍多。
LongAdder的平均耗时是AtomicLong的十分之一。

线程数为30

1、吞吐量

Benchmark   Mode  Cnt    Score    Error   Units
Main.run0  thrpt    5   36.215 ±  2.341  ops/us
Main.run1  thrpt    5  486.630 ± 26.894  ops/us

2、平均耗时

Main.run0  avgt    5  0.792 ± 0.021  us/op
Main.run1  avgt    5  0.063 ± 0.002  us/op

线程数为30个时:

LongAdder的吞吐量比较大,也是AtomicLong的10倍多。
LongAdder的平均耗时也是AtomicLong的十分之一。
总结
一些高并发的场景,比如限流计数器,建议使用LongAdder替换AtomicLong,性能可以提升不少。

http://www.lbrq.cn/news/966205.html

相关文章:

  • 网址导航类网站如何做推广/关键词录入榜
  • 网站建设三剑客/十大搜索引擎网站
  • 国外免费网站建设/千万不要学网络营销
  • 销售网站设计/淘宝如何提升关键词排名
  • 网站建设 开发票/免费域名怎么注册
  • 日本vtuber在b站的钱/大二网页设计作业成品
  • 六安网站建设哪家靠谱/网站设计公司上海
  • 用邮箱地址做网站域名好吗/网络营销师证书需要多少钱
  • 广州网站建设联系电话/sem竞价托管多少钱
  • 昆明小程序定制/seo交流qq群
  • 做棋牌开发的网站/google seo怎么做
  • 建设部质监局信息查询官方网站/河南企业网站推广
  • 如何上传网站/沈阳网络营销推广的公司
  • 平湖市住房建设局网站/百度seo优化收费标准
  • 济南行知网站建设/别做网络推广员
  • 注册网站模板/抚州网络推广
  • 网站开发经济可行性分析怎么写/外链查询
  • wordpress自定义结构空白页/厦门关键词排名优化
  • android移动网站开发详解光盘下载/seo优化排名工具
  • 网页设计哪个培训机构好/正规seo排名多少钱
  • 专业手机网站建设推荐/淘宝热搜关键词排行榜
  • 高端网站设计服务商/谷歌搜索广告
  • 房地产设计网站/百度公司官网入口
  • 网站 制作/怎么注册自己公司的网址
  • lnmp wordpress 安装教程/seo咨询顾问
  • 开服网站建设/网站免费推广软件
  • 一个公司可以做2个网站么/外贸网站seo
  • 建站之星网站空间根目录/百度自然排名优化
  • 做网站的主流软件/短信广告投放软件
  • 网站的竞品分析怎么做/品牌营销推广方案怎么做
  • redis中间件
  • 镁合金汽车零部件市场报告:行业现状、发展趋势与投资前景分析
  • CrewAI与LangGraph:下一代智能体编排平台深度测评
  • github上传大文件(多种解决方案)
  • AI Agent开发学习系列 - langchain之LCEL(2):LCEL 链式表达解析
  • 【代码】Matlab鸟瞰图函数