首页 > 解决方案 > 使用分布式计数器提高性能,寻找库

问题描述

我们有一个具有许多线程的系统,每个线程递增相同的计数器。最后,我们需要所有线程的增量总数。由于最终结果的大小和同步成本,我们怀疑当前解决方案存在性能问题,该解决方案使用对单个变量的同步访问。

为了避免同步,我想使用分布式计数器(正确的术语?),每个线程都会增加自己的计数器副本。在获得最终结果时,单个计数器仅被求和一次。

我可以从头开始实现这样的计数器。但我想,我不是第一个有这种要求的人。令人惊讶的是,快速搜索并没有找到任何图书馆。你能推荐一些库或演示代码吗?我正在寻找一个简单的解决方案,没有繁重的框架。

标签: javamultithreadingperformance

解决方案


您的系统是否有许多不同的进程来管理所有不同的线程?

如果所有线程都由同一个进程管理,我认为您不需要分布式资源(计数器),您可以按照建议使用AtomicInteger Atomic 意味着它是线程安全的,可以从多个线程访问,并且不会发生数据损坏.

如果您的系统确实使用了许多进程,那么您将需要分布式资源。您可以使用任何类型的数据库来实现这一目标。在我看来,Redis可能是一个不错的选择。或任何 MySql 数据库,如果你想要 100% 数据一致性


推荐阅读