高并发
softwareDragon
软件工程师一枚
展开
-
高并发系统的演进(如何设计一个高并发系统架构)
一:系统拆分:将一个系统拆分为多个子系统,用dubbo或springCloud来搞,然后每个系统连接一个数据库,这样就可以对并发访问起到一定的作用。二:缓存:必须得用缓存。大部分的高并发场景,都是读多写少,完全可以在数据库和缓存中都写一份,然后读的时候大量都是走的缓存。毕竟redis轻松单机几万的并发是完全没有问题的。三:MQ:可能你还是会出现高并发写的场景,比如一个业务操作里要频繁操作数据库多次,这时候就得用MQ了,大量写请求到MQ里,后边的系统消费后慢慢写,控制在mysql承载范围之内,MQ单机原创 2020-12-05 10:45:15 · 189 阅读 · 0 评论 -
JAVA ConcurrentHashMap 的实现
java1.8之前采用分段锁Segment(默认分为16段)就行实现(底层还是数组+链表) 之后采用(数组+链表+红黑树)就行实现,并发控制采用CAS(compareAndSet,利用JNI来完成CPU指令的操作)+Synchronized原创 2020-07-04 16:20:54 · 105 阅读 · 0 评论 -
java 并发工具类 各维度解读
一:为了并发安全:互斥同步、非互斥同步、无同步方案1.1互斥同步(锁)1.1.1 锁的分类 从不同的角度分1.1.1.1 线程要不要锁住同步资源 锁住(悲观锁) 不锁住(乐观锁)1.1.1.2 多线程是否共享一把锁 可以(共享锁) 不可以(独占锁)例如ReentrantReadWriteLock 读写锁1.1.1.3 多线程竞争时,是否排队 排队(公平锁) 先尝试插队,插队失败再排队(非公平锁 为了提高效率)1.1.1.4 同一个线程是否可以重复获取同一把锁 可以(可重入,例如R..原创 2020-06-10 20:06:25 · 94 阅读 · 0 评论 -
java Runnable Callable Future 区别与联系
一:Runnable缺点1.不能返回一个返回值2.不能抛出检查异常二:Callable弥补了上述Runnable的两个缺点三:Callable和Future的关系1.我们可以用Future.get来获取Callable接口返回的执行结果,还可以通过Future.isDone来判断任务是否已经执行完成了,以及取消这个任务,限时获取任务的结果等2.在call()未执行完毕之前,调用get()的线程(假定此时是主线程)会阻塞,知道call方法返回了结果后,此时futrue.get()才会得原创 2020-06-07 23:19:57 · 158 阅读 · 0 评论 -
JAVA AQS的作用 内部原理解析
AQS是一个用于构建锁、同步器、协作工具类的工具类(框架)。有了AQS,更多的协作工具类都可以很方便得写出来。有了AQS,构建线程协作类就容易多了。AQS最核心的就是三个部分:一:.state:1.这里的state的具体含义,会根据具体实现类的不同而不同,比如在Semaphore里,它表示“剩余的许可证数量”,而在CountDownLatch中,它表示“还需要倒数的数量”,在ReentrantLock中,state表示锁的占有情况,包括可重入计数,当state为0的时候,表示Lock不被任何线程原创 2020-06-07 17:54:50 · 304 阅读 · 0 评论 -
java 并发控制流程类 方法 使用场景
一:CountDownLach 类 使用场景:一个线程等待其他一个或多个线程执行完后再继续它的操作例如:举个例子,有三个工人在为老板干活,这个老板有一个习惯,就是当三个工人把一天的活都干完了的时候,他就来检查所有工人所干的活。记住这个条件:三个工人先全部干完活,老板才检查常用方法:1.countDown 工人干完了调用这个方法2.await 老板分完活后,在等待检查,当CountDownLatch的值为0时,则老板开始检查二:Semaphore 使用场景:用于做限流处理,比如说同时只允许原创 2020-06-07 11:27:56 · 144 阅读 · 0 评论 -
java CopyOnWriteArrayList 适用场景 读写规则
一:适用场景1.读操作尽可能地快,而写即使慢一点也没有太大的关系2.读多写少:黑名单,每日更新;监听器:迭代操作远多余修改操作3.CopyOnWriteArrayList可以在迭代的过程中修改内容,但是ArrayList不行。4.CopyOnWrite的含义:创建新副本,读写分离。二:CopyOnWriteArrayList缺点1.数据一致性问题:CopyOnWrite容器只能保证数据的最终一致性,不能保证数据的实时一致性。所以如果你希望写入的数据马上能读到,请不要使用CopyOnW原创 2020-06-06 12:46:42 · 1400 阅读 · 1 评论 -
AtomicLong和LongAdder区别 使用场景
1.在竞争不是很激烈的情况下,AtomicLong和LongAdder这两个类具有相似的特征。但是在竞争激烈的情况下,LongAdder的预期吐出量要高得多,但要消耗更多的空间2.LongAdder适合的场景是统计求和计数的场景,而且LongAdder基本只提供了add方法,而AtomicLong还具有cas方法...原创 2020-06-05 23:22:06 · 1470 阅读 · 0 评论 -
Java中Thread、ThreadLocalMap、ThreadLocal的联系与区别
一个Thread对应一个ThreadLocalMap,一个ThreadLocalMap可以对应多个ThreadLocal原创 2020-06-03 13:08:38 · 635 阅读 · 0 评论 -
java 已经有了synchronized ,为什么需要Lock及Lock的一些方法
1.效率低:锁的释放情况少,试图获得锁时不能设定超时、不能中断一个正在试图获得释放锁的进程2.不够灵活(读写锁更灵活):加锁和释放的时机单一,每个锁仅有单一的条件(某个对象),可能是不够的3.无法知道是否成功获取到锁...原创 2020-06-03 13:05:54 · 340 阅读 · 0 评论 -
前端组件分流、限流设计
1.限制接口总并发数:按照ip限制其并发连接数2.平滑限制接口请求数(漏桶算法限流):限制ip每分钟只能调用120次接口(平滑处理请求,即每秒放过2个请求),超过部分进入桶中等待,如果桶满了,则进行限流3.限制接口时间窗请求数(令牌桶算法限流):限制ip每分钟只能调用120次接口(允许在时间段开始的时候一次性放过120个请求),超过桶容量,则直接拒绝。(常用推荐)...原创 2020-02-03 16:32:50 · 707 阅读 · 0 评论