问题标签 [contention]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1181 浏览

multithreading - MSXML XSL 转换多线程性能争用

我有一个多线程服务器 C++ 程序,它使用 MSXML6 并不断解析 XML 消息,然后应用准备好的 XSLT 转换来生成文本。我在具有 4 个 CPU 的服务器上运行它。每个线程都是完全独立的,并使用自己的变换对象。线程之间不共享任何 COM 对象。

这很好用,但问题是可扩展性。运行时:

  1. 使用一个线程,每个线程每秒可以进行大约 26 次解析+转换。
  2. 有 2 个线程,我得到大约 20/s/线程,
  3. 带 3 个线程,18/s/线程。
  4. 有 4 个线程,15/s/线程。

由于线程之间没有共享任何东西,我期望接近线性的可伸缩性,因此 4 线程应该比 1 快 4 倍。相反,它只快 2.3 倍。

它看起来像一个经典的争用问题。我编写了测试程序来消除我的代码中存在争用的可能性。我正在使用 DOMDocument60 类而不是 FreeThreadedDOMDocument 类,以避免不必要的锁定,因为文档永远不会在线程之间共享。我努力寻找缓存行错误共享的任何证据,但至少在我的代码中没有。

另一个线索,每个线程的上下文切换速率 > 15k/s。我猜罪魁祸首是 COM 内存管理器或 MSXML 中的内存管理器。也许它有一个全局锁,必须为每个内存分配/释放获取和释放。我简直不敢相信,在这个时代,内存管理器的编写方式并不能很好地适应多线程多 CPU 场景。

有谁知道是什么导致了这种争用或如何消除它?

0 投票
2 回答
6420 浏览

oracle - 未索引的外键导致 TM Enqueue Contention

因此,我们被告知,TM Enq争用的一种来源可能是未编入索引的 FK。我的问题是哪一个。

我有一个INSERT INTO Table_B正在录音的TM Enq Wait

它包含作为PK其他表的父级的 a ,并且它具有FK限制为其他PKs 的列。

那么哪些FK需要索引:该表的列还是它的子表?

注意:我知道这不是 TM 争用的唯一原因。如果是这样的话,你能解释一下为什么不可能是这样吗?

0 投票
5 回答
1056 浏览

multithreading - 哪种类型的图表最适合可视化线程问题,例如争用?

在调试我们系统的问题时,我发现了导致瓶颈的线程争用。我需要向参与处理此问题的其他人解释这一现象。其中一些不是来自开发团队(然而,他们是相当技术性的)。那么什么类型的图表可以用来描述线程问题,例如争用、死锁等?一些例子会非常有用。

0 投票
1 回答
475 浏览

.net - 如何收集有关争用率的信息?

我预计我正在开发的软件的负载将在接下来的几个月中增加。因此我做了一些压力测试,并用 perfmon 收集了一些性能数据。对于其中一个数据,我想了解更多信息,那就是争用率。

所以我的问题是,如果你们中的一个人知道,是否有可能获得更多关于它的信息,而不仅仅是这个简单的数字。使用 WinDbg 和 SOS 的 Afaik 可以更深入地研究这一点,但恕我直言,它不是很舒服。我想知道是否有可用的工具,它指向瓶颈......,或者不仅创建一个整体计数器,而是为类或特定锁创建计数器的工具......

蒂亚·马丁

0 投票
6 回答
1315 浏览

java - 在哪里寻找 java 中的同步争用证据?

我们的 Tomcat Web 应用程序在被几百个用户使用时感觉很慢。服务器位于托管公司,他们的报告没有显示带宽或 CPU 工作负载有任何问题,所以我怀疑速度变慢的原因可能是因为我们在同步调用下封装的一些遗留代码的争用,因为它是更容易的路径。

我在开发环境中进行了一些人工测试,使用 ThreadLocal 解决方案更改同步调用,它变得更快,但我知道我的老板会要求我提供一些证据,证明它在生产中也会更快。

如何确定线程争用是否是我的应用程序中的问题?

0 投票
2 回答
216 浏览

java - 可靠地再现数据库争用

我们在数据库表上遇到了一些规律性争用,并想评估一些不同的选项来解决这个问题。

为此,我需要在测试用例中重现具有可重复可靠性的表(任何表)上的争用。

我正在考虑的方法是反转锁的语义(例如java.util.concurrent.locks.ReentrantLock)并在表上开始写入时释放锁,允许所有读取在写入开始时发生。

因此,一个写入器线程持有锁,直到在对表执行插入操作之前不久,然后释放锁,多个读取器线程将尝试对同一个表运行选择语句。

想知道是否对这种方法有任何想法,或者是否有一种更简单的方法可以以 100% 的可靠性重现数据库表上的争用。

谢谢

0 投票
1 回答
269 浏览

sqlite - sqlite - 如何处理访问同一数据库的两个单独线程之间的潜在争用?

问题:如何处理访问同一个 Sqlite 数据库的两个单独线程之间的潜在争用?

背景:我有一个通过 ADO.net 使用 Sqlite 的 C# Winforms 应用程序。我在 winforms 应用程序中有一个后台工作线程。我注意到当主线程和后台工作线程都尝试更新 sqlite 数据库时,我会得到一个异常,即调用 DBDataAdaptor.Update()..

所以我对检查我的代码(尽管是主线程代​​码和/或在后台工作程序中运行的代码)来优雅地处理这个问题感兴趣,或者通过预先检查的方式,或者阻塞直到 OK,或者引发我可以捕获的特定错误...

谢谢

0 投票
3 回答
6020 浏览

c# - C#中的每线程内存管理

继续从了解 VS2010 C# 并行分析结果的讨论,但更重要的是:

我有许多并行工作的线程(使用 Parallel.For/Each),它们为小类使用许多内存分配。

这会在全局内存分配器线程上产生争用。

有没有办法指示 .NET 为每个线程预分配一个内存池并从这个池中进行所有分配?

目前我的解决方案是我自己的内存池实现(全局分配的 T 类型对象数组,在线程之间回收),这很有帮助,但效率不高,因为:

  1. 我不能指示 .NET 从特定的内存片进行分配。
  2. 我仍然需要多次调用new来为池分配内存。

谢谢,
哈盖

0 投票
2 回答
176 浏览

visual-studio-2010 - 是什么导致我的 Azure 队列代码发生线程争用?

我刚刚针对我的 Azure 代码运行了 Visual Studio 2010 线程分析器,并注意到我遇到了很多争用。我的代码被阻塞的频率比它运行的频率高!

我的工人根本没有自定义线程逻辑。这是一个简单的 While 循环,它询问各种队列是否有工作。我创建了 QueueRepositoryClass 的实例,然后调用 GetQueueMessage 函数。

看起来由于某种原因,多个线程正在访问我的 GetQueueMessage 方法并使用相同的 queueClient 实例。也许是我使用 CloudStorageAccount 对象的结果?还是 CreateCloudQueueClient 扩展方法?

0 投票
1 回答
2229 浏览

php - 如果 2 台或更多台服务器尝试同时写入同一个文件,NFS 会发生什么情况?

我正在开发一个自动调整图像大小的 PHP webapp,我正在考虑将缓存的副本存储在 NFS 挂载的 NAS 上,这样我可以在更新图像时轻松刷新缓存。

我唯一担心的是,如果集群中的 2 个或更多服务器试图同时创建相同的图像缓存文件,NFS 通常会发生什么?

很有可能当缓存被刷新以进行内容更新时,它们可能会发生这样的冲突,但是我没有很好的方法来测试开发中的这种场景,因为我只在一个盒子上工作。

有这方面经验的人吗?