减少全局竞争性同步,提高应用的垂直扩展能力
垂直扩展,简单的说,是当单一系统硬件升级扩展时,如增加CPU,内存,应用程序能够随之线性提高业务处理能力。
多线程是服务端 Java 应用的标准处理方式,其优点不用赘述。本文要讨论的是,如何在设计阶段降低多线程之间的竞争性同步开销。
假设一个Web应用,需要为当前用户维护在线用户信息。此用户信息列表会放在 Application 范围的一个 Map 中,那么我们增加或删除一个在线用户的操作会是这样:。
Map clientMap = ...// from Application Context
synchronized(clientMap){
clientMap.put(clientId,clientObject);
}
这是一个典型的全局同步代码,当并发线程增加时,这部分代码就有可能会存在潜在垂直扩展瓶颈。
最简单解决办法:用 ConcurrentHashMap。
ConcurrentHashMap的多线程下的表现要比HashMap好的多,可以做到随着线程数增长性能基本保持稳定。
参见:http://www-128.ibm.com/developerworks/cn/java/j-jtp07233/index.html
对 ConcurrentHashMap 的分析,参见:http://www-128.ibm.com/developerworks/cn/java/j-jtp08223/index.html
在 ConcurrentMap/ConcurrentLinkedQueue 不能帮助我们的情况下,我们需要明确设计以避免全局竞争。
基本原则是:
1 预分配,降低争用出现的频率。
2 降低锁的粒度,将全局竞争变为局部竞争。
预分配策略示例:
对于一在线交易处理系统,需要为每个交易生成交易流水号,假设有多台交易服务器按照集群方式配置,同时提供服务。那么需要在交易服务器之间进行同步,以保证交易流水号的正常增长。
一
种处理方式为:在数据库中保存当前交易流水号的最高值,每台机器一次预分配1000流水,内部采用线程同步进行分配,用完再从数据库分配。这里数据库充当
了全局存储和全局同步工具,如果每来一条交易,就访问一次数据库,考虑到数据库同步和事务的负担,这里会成为严重的性能瓶颈。
降低锁粒度策略示例:
1 ConcurrentHashMap 本身就是个很好的模范。它采用32颗锁,来代替普通 HashMap 的单颗对象锁。
2 对于数据库中并发大的表,可以考虑将表级锁改为行级锁,提高并发性。
分享到:
相关推荐
根据个人偏好和硬件性能,选择合适的垂直同步策略,能够有效地解决画面撕裂问题,同时尽可能地减少性能损失。对于NVIDIA显卡用户,通过NVIDIA控制面板进行细致的设置,可以定制出最适合自己的图形设置。
LabVIEW功能性全局变量是开发大型、复杂应用时非常重要的数据通信工具。它们允许在不同的VI(虚拟仪器)之间共享数据,解决了局部变量在多线程环境下可能出现的数据竞争问题。本篇将详细介绍LabVIEW功能性全局变量的...
GALS系统通过在局部同步模块之间引入异步连接来减少时钟域之间信号传递的复杂性,并允许系统在不同模块需要处理数据时才活跃,其余时间可以处于节能的暂停状态。 4. **四相单轨握手协议**:这是一种用于在两个或多...
【数值仿真】数值仿真是一种检验理论分析有效性的常用手段,通过模拟实际运行情况,验证所提出的同步性条件和控制策略是否能够成功应用于具有混合时滞的四元数神经网络。 综上所述,该论文研究了四元数神经网络在...
《网络游戏-无线传感器网络的可认知全局时钟同步方法及在多跳网络中的应用》这一主题涉及了无线传感器网络(Wireless Sensor Networks, WSNs)的重要技术——时钟同步,以及它在多跳网络环境中的应用。时钟同步对于...
这种技术旨在克服传统的同步电路设计中的时钟偏移和功耗问题,通过允许各个部分在网络中独立运行并仅在必要时同步,提高了系统的效率和灵活性。本文将深入探讨GALS技术在网络游戏路由器装置中的应用及其重要性。 ...
随着当当网等电商企业的发展,原有的垂直架构无法满足日益增长的流量需求,因此转向了横向扩展架构,以提高系统的可伸缩性和可靠性。 1. **业务增长问题**:随着用户数量的增加,单一服务器或应用无法承载所有请求...
- 全局指数反同步在某些应用中很重要,例如在信息安全领域,可以用于创建更安全的通信系统,因为解码者必须精确地知道发送者的同步状态才能解码信息。 3. **时滞**: - 在神经网络模型中,时滞通常表示信息传递的...
"具有泄漏时滞的复值神经网络的全局同步性" 神经网络是机器学习和深度学习的基础概念之一,具有自学习功能、联想记忆功能和鲁棒性强等特点,广泛应用于信号传输、联想记忆、模式识别、图像处理、保密通信、优化计算...
在Android开发中,全局事件监听器是一种非常实用的设计...在实际开发中,这样的全局监听器能够帮助我们减少代码重复,提高代码复用性和可维护性。而EventBus则是一种更高级的事件通信工具,但在这个场景下并未使用。
3. **全局时间同步**:FlexRay具有精确的全局时间同步能力,每个节点都有一个共同的时间基准,可以精确到微秒级别,这对于实现跨网络的游戏同步非常关键。网络游戏中的玩家动作必须在所有客户端之间同步,以避免出现...
总的来说,中立型驱动反应BAM神经网络的全局渐近同步性研究是神经网络理论的一个重要分支,对于理解和优化复杂系统的行为,以及在实际应用中解决实际问题,如疾病控制和经济分析等方面具有重大价值。通过创新的方法...
根据提供的文件内容,以下是关于“GoldenDB分布式事务全局一致性”的详细知识点: 分布式事务全局一致性的概念:分布式事务指的是在分布式系统中,跨越多个节点或服务的事务处理。全局一致性是指这些分布式事务能够...
《高效全局优化算法及其在团簇优化中的应用研究》这篇研究深入探讨了在全球优化问题中如何采用高效算法来实现最优解的寻找,并将其应用于团簇分析中,以提升整体性能和准确性。全球优化是解决复杂多维度问题的关键,...
在Windows 7操作系统中,英伟达(NVIDIA)显卡的垂直同步功能是一种技术,用于同步显示器刷新率与GPU的渲染速率,以防止画面撕裂现象。然而,有些用户可能会发现垂直同步导致游戏或视频播放时出现延迟或不流畅,这时...
微信小程序的全局状态同步管理库是开发者在构建微信小程序应用时,为了更高效、有序地管理应用程序中的共享状态而设计的一种解决方案。在小程序的开发过程中,随着应用复杂性的增加,多个页面之间共享状态的管理变得...
Posix 线程同步机制是解决任务间需要大量数据通信的问题、提高程序的实时响应能力和减少对系统资源的使用的重要机制。在分布式电网监控系统中, Posix 线程同步机制可以应用于多计算任务的并发处理,从而提高系统的...
综上所述,面向大规模确定性网络的全局循环排队与转发机制(GCQF-3)通过在标准CQF基础上进行队列扩展、门控策略优化以及增加全局状态感知能力,有效解决了现有排队转发机制在面对大规模网络时存在的局限性,特别是...
全局池化层可以减少网络参数,从而减少模型尺寸,并且可以提高网络的泛化能力。 二、融合损失方法 本文提出了一种学习不同特征的融合损失方法,将哈希量化误差损失与分类损失进行加权融合,以学习具有多分类性质的...