java - 使用分布式计数器提高性能,寻找库
问题描述
我们有一个具有许多线程的系统,每个线程递增相同的计数器。最后,我们需要所有线程的增量总数。由于最终结果的大小和同步成本,我们怀疑当前解决方案存在性能问题,该解决方案使用对单个变量的同步访问。
为了避免同步,我想使用分布式计数器(正确的术语?),每个线程都会增加自己的计数器副本。在获得最终结果时,单个计数器仅被求和一次。
我可以从头开始实现这样的计数器。但我想,我不是第一个有这种要求的人。令人惊讶的是,快速搜索并没有找到任何图书馆。你能推荐一些库或演示代码吗?我正在寻找一个简单的解决方案,没有繁重的框架。
解决方案
您的系统是否有许多不同的进程来管理所有不同的线程?
如果所有线程都由同一个进程管理,我认为您不需要分布式资源(计数器),您可以按照建议使用AtomicInteger Atomic 意味着它是线程安全的,可以从多个线程访问,并且不会发生数据损坏.
如果您的系统确实使用了许多进程,那么您将需要分布式资源。您可以使用任何类型的数据库来实现这一目标。在我看来,Redis可能是一个不错的选择。或任何 MySql 数据库,如果你想要 100% 数据一致性
推荐阅读
- gitlab - 如何使 HTTPS git 命令的密码无效?
- python - 如何从python中的不同文件夹和子文件夹加载数据(图像)
- typescript - 如何根据消息到达的时间集成更新用户列表?
- amazon-web-services - 无法从 lambda 在 DynamoDB 上写入
- mongodb - pymongo $exists :false vs False
- javascript - 为什么我们可以直接分配对象时使用 Object.create() ?
- javascript - 显示来自 material-ui-dropzone 的图像
- javascript - 如何添加我们自己的反应元素?
- maven - IntelliJ 中的 Maven 依赖项有哪些下载文档?
- deno - 我可以使用 Deno 更改文件元数据吗?