Java JUC工具类--Semaphore

Semaphore

  • 在Semaphore信号量非常适合高并发访问限制,新系统在上线之前,要对系统的访问量进行评估,评估是经过以往的经验、数据、历年的访问量,已经推广力度进行一个合理的评估
  • 当然评估标准不能太大也不能太小,太大的话投入的资源达不到实际效果,纯粹浪费资源,太小的话,某个时间点一个高峰值的访问量上来直接可以压垮系统

相关概念

  • PV(page view)网站的总访问量,页面浏览量或点击量,用户每刷新一次就会被记录一次
  • UV(unique Visitor)访问网站的一台电脑客户端为一个访客。一般来讲时间上以00:00-24:00之内相同ip的客户端只记录。
  • QPS(query per second)即每秒查询数,qps很大程度上代表了系统业务上的繁忙程度,每次请求的背后,可能对应着多次磁盘I/O,多次网络请求,多个cpu时间片等。我们通过qps可以非常直观的了解当前系统业务情况,一旦当前qps超过所设定的预警阀值,可以考虑增加机器对集群扩容,以免压力过大导致宕机,可以根据前期的压力测试得到估值,在结合后期综合运维情况,估算出阀值
  • RT(response time)请求的响应时间,这个指标非常关键,直接说明前端用户的体验,任何系统设计师都想降低rt时间。
  • 当然还涉及cpu、内存、网络、磁盘等情况,更细节的问题很多,如select、update、delete/ps等数据库层面的统计。
  • 容量评估:一般来说通过开发、运维、测试、以及业务等相关人员,综合出系统的一系列阀值,然后我们根据关键阀值如qps、rt等,对系统进行有效的变更
  • 一般来讲,我们进行多轮压力测试以后,可以对系统进行峰值评估,采用所谓的80/20原则,即80%的访问请求将在20%的时间内达到。这样我们可以根据系统对应的PV计算出峰值qps
  • 峰值qps= (总PV × 80%)/ (60 × 60 × 24 × 20%) 然后在将总的峰值qps除以单台机器所能承受的最高的qps值,就是所需要机器的数量:机器数 = 总的峰值qps / 压测得出的单机极限qps
  • 当然不排除系统在上线前进行大型促销活动,或者双十一、双十二热点事件、遭受到DDos攻击等情况,系统的开发和运维人员急需要了解当前系统运行的状态和负载情况,一般都会有后台系统去维护

代码示例

package com.example.core.juc;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;public class UseSemaphore {public static void main(String[] args) {ExecutorService executorService = Executors.newFixedThreadPool(20);//定义20个线程Semaphore semaphore = new Semaphore(5);//每次只容许5个线程进行操作,进行限流for(int index = 1;index <= 20; index++){final int token = index;Runnable run = new Runnable() {@Overridepublic void run() {try{semaphore.acquire();//进行相关的业务操作System.out.println("获得许可操作:"+token);long sleepTime = (long)(Math.random() * 10000);Thread.sleep(sleepTime);}catch(InterruptedException e){e.printStackTrace();}finally{semaphore.release();}}};executorService.execute(run);}//        semaphore.getQueueLength();//取得等待许可的线程个数executorService.shutdown();}
}
/*
获得许可操作:5
获得许可操作:2
获得许可操作:1
获得许可操作:4
获得许可操作:3
获得许可操作:8
获得许可操作:9
获得许可操作:6
获得许可操作:7
获得许可操作:10
获得许可操作:11
获得许可操作:12
获得许可操作:13
获得许可操作:14
获得许可操作:15
获得许可操作:16
获得许可操作:17
获得许可操作:18
获得许可操作:19
获得许可操作:20*/

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 基础知识点整理 和具体应用

Python教程 Python是一种简单易学&#xff0c;功能强大的编程语言。它包括了高效的高级数据结构和简单而有效的方法&#xff0c;面向对象编程。Python优雅的语法&#xff0c;动态类型&#xff0c;以及它天然的解释能力&#xff0c;使其成为理想的语言&#xff0c;脚本和应用程序…

Java 线程池相关问题

线程池的拒绝策略 AbortPolicy&#xff1a;直接抛出异常阻止系统正常工作。CallerRunsPolicy&#xff1a;只要线程池未关闭&#xff0c;该策略直接在调用者线程中&#xff0c;运行当前被丢弃的任务。DiscardOldestPolicy&#xff1a;丢弃最老的一个请求&#xff0c;尝试再次提…

对编程人员我想说:多做 多实践 多写代码

有很多人问我&#xff0c;怎样提高自己的能力&#xff1f;有初学者&#xff0c;有水平达到一定程度的程序员。 我想说&#xff0c;不要过多的看代码&#xff0c;看计算机理论&#xff0c;看别人写的文章&#xff0c;代码等&#xff0c;最重要的是自己理解了某个原理&#xff0c…

读人是基础,看人是关键,做人最重要

人生在世&#xff0c;读人是基础&#xff0c;看人是关键&#xff0c;做人最重要。 一、读人——一个人就是一本书。读人&#xff0c;比读其他文字的书更难。在生活中&#xff0c;每个人都是书&#xff0c;每人又都是读者。我们认认真真地读&#xff0c;读了大半辈子&#xff0c…

使用postman模拟百度通用文字识别

1&#xff0c;登录百度AI开放平台 百度AI网站新手指南链接在顶部导航栏中&#xff0c;找到控制台选项&#xff0c;输入账号和密码&#xff0c;进入管理中心页面在管理中心页面中&#xff0c;找到文字识别的选项找到创建应用的选项&#xff0c;进行ocr项目的创建需要输入应用的…

3个观念 不再瞎学习!

此刻&#xff0c;你应该要做什么准备&#xff1f;加码股市还是追逐房市&#xff1f;都不是。在你分配时间、资源的投资组合里&#xff0c;有没有这一项&#xff1a;“自己”&#xff1f; 没有人会否认充实自我的重要&#xff0c;但是经历一场金融风暴大震撼&#xff0c;当企业…

Java调用百度OCR文字识别的接口

调用百度OCR文字识别的接口&#xff0c;来自于百度官网&#xff0c;亲测可以使用 跳转链接FileUtil的下载链接Base64Util下载链接HttpUtil下载链接GsonUtils下载链接Accurate.java文件 package com.baidu.ai.aip;import com.baidu.ai.aip.utils.Base64Util; import com.baidu.…

做好7步 迅速成为行业专家

行行出状元&#xff0c;但不一定人人能成为行业专家或权威。无论是做独立顾问&#xff0c;还是手下有250名员工的工厂主管&#xff0c;都是在用自己多年丰富经验在帮助企业成功。既然有了专业知识和经验&#xff0c;为什么不把它最大化利用&#xff0c;来建立自己的行业权威&am…

redis常用命令与特性

keys * 返回满足条件的所有key&#xff0c;可以模糊匹配select 数字0-15&#xff0c;进行数据库切换&#xff0c;默认0-15个exists 是否存在指定的keypersist 取消过期时间 select 选择数据库 &#xff08;0-15&#xff0c;总共16个数据库&#xff09;move key index 将当前数据…

紧急不代表重要:管理时间的六个秘密

当整个世界都永远在跟集中精神做事做对的时候&#xff0c;怎么办&#xff1f;Managershare&#xff1a;“世界上效率最高的程序员有什么相同之处&#xff1f;不是经验&#xff0c;薪水或者花在一个项目上的时间&#xff0c;而是他们的老板创造了一个免于走神的环境。”这老板太…

redis安全

定期打补丁禁止一些高危命令 &#xff08;flushdb、keys *、flushall&#xff09;以低权限运行 Redis 服务禁止外网访问 Redis设置访问密码 足够复杂&#xff0c;防止暴力破解 requirepass xxxxxxxx访问权限 内网通过acl限制可以访问redis的ip和端口

如何在三个月内获得三年的工作经验

在多年的工作生涯中&#xff0c;总会目睹一批人的升职像火箭速度一样。 而总有一批人&#xff0c;就像蜗牛一样&#xff0c;工作岗位和职位几乎从来不变。 我们看看&#xff0c;2个名人的快速成长史。 一个是教英语的李阳&#xff0c;他读大学时成绩不好&#xff0c;英语不…

Redis Cluster集群模式

Redis Cluster 它是Redis的分布式解决方案&#xff0c;在Redis 3.0版本正式推出的&#xff0c;有效解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时&#xff0c;可以采用Cluster架构达到负载均衡的目的。数据分布理论: 分布式数据库首要解决把整个数据集按照…

永远和靠谱的人在一起!

巴菲特每年都会同大学生进行座谈&#xff0c;在一次交流会上&#xff0c;有学生问他&#xff1a;您认为一个人最重要的品质是什么?巴菲特没有正面回答这个问题&#xff0c;而是讲了一个小游戏&#xff0c;名为&#xff1a;买进你同学的10%。 巴菲特说&#xff1a;现在给你们一…

Redis事务详解

传统事务的特性 原子性一致性隔离性&#xff1a;事务之间互不干扰持久化&#xff1a;一旦事务提交&#xff0c;无法修改 Redis事务机制 MULTI、EXEC、DISCARD和WATCH命令是Redis事务功能的基础。Redis事务允许在一次单独的步骤中执行一组命令&#xff0c;并且可以保证如下两个…

工作的最终目的

当时公司招了大批应届本科和研究生毕业的新新人类。平均年龄25岁。那个新的助理&#xff0c;是经过多次面试后&#xff0c;我亲自招回来的一个女孩。名牌大学本科毕业&#xff0c;聪明&#xff0c;性格活泼。私下里我得承认&#xff0c;我招她的一个很重要的原因&#xff0c;除…

销售员所做的一切工作最终目的就是为了成交

&#xff08;1&#xff09;最后一次报价禁忌.报价过晚或者过于匆忙步幅度太大&#xff0c;显得过于慷慨;让步幅度太小&#xff0c;显得毫无意义当谈判进展到最后&#xff0c;双方只是在最后的某一两个问题上尚有不同意见&#xff0c;过让步才能求得一致&#xff0c;签订协议。在…

Redis java客户端操作

jedis jedis官方指定的redis java客户端&#xff0c;将其导入到pom.xml问价内 <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><vers…

HEVC/H265 namespace 介绍

在 HEVC/H265 代码中&#xff0c;有三个使用的namespace&#xff1a; 1. df 2. df::program_options_lite 3. RasterAddress 对于第一个 df 的namespace&#xff0c;我一直百思不得其解&#xff0c;df 是什么含义&#xff1f;老外对起名是很重视的&#xff0c;肯定有原因。…

Redis整合Springboot实现数据共享

代码的整体结构 RedisSessionConfig.java package com.cc.springbootredissession.config;import org.springframework.context.annotation.Configuration; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;Configuration E…