geek

并发编程之限流算法

计数限流 最简单的限流算法就是计数限流了,例如系统能同时处理100个请求,保存一个计数器,处理了一个请求,计数器加一,一个请求处理完毕之后计数器减一。 每次请求来的时候看看计数器的值,如果超过阈值便拒绝处理。 非常的简单粗暴,计数器的值要是存内存中就算单机限流算法。存中心存储里,例如 Redis 中,集群机器访问就算分布式限流算法。 优点就是:简单粗暴,单机在 Java 中可用 Atomic 等原子类、分布式就 Redis incr。 缺点就是:假设我们允许的阈值是1万,此时计数器的值为0, 当1万个请求在前1秒内一股脑儿的都涌进来,这突发的流量可是顶不住的。缓缓的增加处理和一下子涌入对于程序来说是不一样的。 固定窗口限流算法

  • 凯文
4 min read
geek

并发设计模式

Immutability模式:如何利用不变性解决并发问题? Copy-on-Write模式:不是延时策略的COW 线程本地存储模式:没有共享,就没有伤害 Guarded Suspension模式:等待唤醒机制的规范实现 Balking模式:再谈线程安全的单例模式 Thread-Per-Message模式:最简单实用的分工方法 Worker Thread模式:如何避免重复创建线程? 两阶段终止模式:如何优雅地终止线程? 生产者-消费者模式:用流水线思想提高效率 Immutability模式:如何利用不变性解决并发问题? 利用 Immutability 模式解决并发问题,也许你觉得有点陌生,其实你天天都在享受它的战果。Java 语言里面的 String 和 Long、

  • 凯文
15 min read