问题标签 [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 投票
1 回答
92 浏览

boost - boost::unique_locks 是否按照调用顺序授予?

我检查了有关Boost Synchronization的文档,但我似乎无法确定 a 是否boost::unique_lock会按顺序获得其锁定。

换句话说,如果两个线程竞争锁定一个已经被锁定的互斥体,那么在释放锁之后它们尝试锁定的顺序是否会保持?

0 投票
2 回答
391 浏览

google-app-engine - GAE 数据存储争用问题

我们的 GAE 应用程序在 NDB 中制作另一个网站的关系数据库的本地副本。有 4 种实体类型 - 用户、表、行、字段。每个用户都有一堆表,每个表都有一堆行,每一行都有一堆字段。

SomeUser > SomeTable > ARow > AField

因此,每个用户都成为一个实体组。我需要一个可以清除某个用户的所有表(及其行)的功能。什么是删除所有表和所有行的正确方法,同时避免约 5 次操作/秒的争用限制。

TransactionFailedError由于实体组的争用,当前代码正在获取s。(我忽略的细节是我们只想删除属性“服务”设置为某个值的表)

0 投票
3 回答
390 浏览

c# - .NET - 减少数组创建时的 GC 争用

我有一些处理大量复制数组的代码。基本上我的类是一个使用数组作为支持字段的集合,并且由于我不想冒任何人修改现有集合的风险,因此大多数操作都涉及在修改集合之前创建集合的副本,因此也复制支持数组。

我注意到复制有时会很慢,在可接受的范围内,但我担心当应用程序扩大并开始使用更多数据时这可能是一个问题。

一些性能分析测试表明,虽然几乎没有消耗 CPU 资源,但我的数组复制代码花费了大量时间阻塞。很少有争执,但很多时间都被阻塞了。由于测试应用程序是单线程的,我假设有一些 GC 争用魔法正在发生。我对 GC 在这些场景中的工作方式没有足够的信心,所以我在这里问。

我的问题 - 有没有办法创建新的阵列来减少 GC 的压力?或者有没有其他方法可以加快速度(为了测试和可读性而简化):

0 投票
1 回答
5342 浏览

fork - fork() 之后的文件描述符相同

我试图了解在调用 fork() 后复制文件描述符的含义及其对争用的可能影响。

在“Linux 编程接口”24.2.1 (p517) 中:

当执行 fork() 时,子进程接收到所有父文件描述符的副本。这些副本是以 dup() 的方式进行的,这意味着父子节点中对应的描述符引用了相同的打开文件描述。

当我运行相同的代码时:

对于两个进程,我得到相同的文件描述符(编号?):ffd=3 和 cfd=3。但是当使用 dup() 运行这段代码时:

我得到不同的文件描述符:ffd=3 和 cfd=4。

然后,我有以下问题:

  1. 什么意味着 fork() 创建了父文件描述符的副本?
  2. 当两个进程(父进程和子进程)在同一个文件描述符上同时执行 fstat() 之类的操作时,是否存在争用?
  3. 如果两个进程同时执行 fstat() 并且两个不同的文件描述符指向同一个文件呢?
0 投票
1 回答
215 浏览

java - Java - 避免轮询数据库的多进程争用的最佳实践

我有一个应用程序每 60 秒加载一次作业。该作业轮询数据库(NoSQL)中的表,如果存在新行,它将在数据库中开始一些处理。

现在为了避免 SPOF,我加载了另一个应用程序实例,我想避免对指示记录的争用。

避免轮询数据库的多进程之间争用的最佳实践是什么?
(是否有任何已知/推荐的 FW)

0 投票
3 回答
35107 浏览

c# - mscorlib.dll 中出现“System.IO.IOException”类型的异常 - 该进程无法访问该文件,因为它正被另一个进程使用

SO上可能有很多像这样的问题,但没有一个能够解决我的问题。我正在以编程方式创建一个文本文件,并使用以下代码将文本写入其中:

我想在文本文件中写入每个像素的值。它适用于几个值,然后突然停止抛出上述异常。

此外,我检查了文件的安全属性,并确保我可以完全控制文件。我无法弄清楚。

任何解决此问题的建议将不胜感激

0 投票
2 回答
1451 浏览

javascript - 多个 PhantomJS 实例挂起

在 Ubuntu 14 上运行多个 PhantomJS 实例时出现问题。几分钟后,进程变得无响应。

简要背景:使用 PhantomJS 2.0 呈现网页,最终使用 Wkhtmtopdf 保存为 PDF。PhantomJS 只负责加载页面、发出 ajax 请求以及等待 PDF 保存到服务器后的响应。它不会生成 PDF 本身。有数百个网页需要生成为 PDF,所以我想在系统允许的情况下并行运行尽可能多的 PhantomJS 实例。

每个 PhantomJS 进程都由一个 shell 脚本启动,如下所示: {path to phantomjs} {path to js file} --data {some argument} >> {path to log file} 2>&1 &

几分钟后问题就出现了,我停止从 PhantomJS 进程获取任何输出,并且看着top我可以看到它们只是躺在那里没有做任何事情。JS 脚本有计时器,如果需要超过一分钟,则重试加载页面,phantom.exit()如果页面无法加载/PDF 生成失败,则最终调用。因此,即使出现问题,该过程仍应退出 - 但事实并非如此。

我尝试更改并行运行的 PhantomJS 实例的数量。尝试了 20 -> 10 -> 5 -> 3,但这似乎并不重要。当一次维护 20 个实例时,我实际上可以成功执行更多作业。

运行时,--debug=true我可以看到它在某些时候卡在了 [DEBUG] WebPage - updateLoadingProgress: 也通过输出我看到了其中的几个警告: [WARNING] QIODevice::write: device not open 这让我相信这是问题的根源。

我认为文件资源可能存在一些争用,所以我尝试不将输出重定向到日志文件,也不使用--local-storage-path,但这没有帮助。

作为旁注,我已经使用 PhantomJS 几年了,现在只按顺序执行相同的过程(一次运行一个 PhantomJS 进程)。尽管有一些障碍需要克服,但效果很好。

知道是什么原因造成的吗?有人遇到过类似的问题吗?关于并行运行多个 PhantomJS 实例有什么建议吗?

谢谢!

0 投票
1 回答
2788 浏览

sql - 无法终止的 Oracle 会话正在等待“来自客户端的 SQL*Net 消息”事件

在 Oracle 11gR2 上,我最近遇到了一个非常有趣的情况,涉及一个阻塞(但空闲!)MERGE语句挂在“来自客户端的 SQL*Net 消息”事件上,导致后续并发执行MERGE的语句通过“光标:引脚 S 等待 X"事件。在 Oracle Enterprise Manager 中,可以观察到以下情况:

在此处输入图像描述

这种情况变得更加严重,因为上面的 Session-ID 1204 不能被以下任何一种杀死:

我们的 DBA 有时能够杀死操作系统进程,但通常需要重新启动整个数据库。幸运的是,到目前为止,只在测试系统上,从未在生产中。

笔记:

我知道这可能与这个相当模糊的问题中报告的类似问题:Oracle 更新/插入卡住,DB CPU 处于 100%,并发性高,来自客户端的 SQL*Net 等待消息。我还是会再次报告,因为我有明确的复制路径,我将报告作为答案。

0 投票
1 回答
1425 浏览

python - Google App Engine 中的争用问题

我在 Google App Engine 中遇到了争用问题,并尝试了解发生了什么。

我有一个带有注释的请求处理程序:

..在该代码中,我获取了一些东西,更新了其他一些东西等。但有时在请求期间日志中会出现这样的错误:

..接着是堆栈跟踪。如果需要,我可以更新整个堆栈跟踪,但它有点长。

我不明白为什么会这样。查看我的代码中出现异常的行,我get_by_id在一个完全不同的实体(Round)上运行。错误消息中提到的“PlayerGameStates”,名称“hannes2”是另一个实体 GameState 的父级,该实体已get_async在前几行从数据库中 :ed;

奇怪(?)的事情是,该实体没有写入数据存储区。我的理解是,如果同一实体同时更新,可能会出现争用错误,并行..或者如果在短时间内发生太多写入..

但是在读取实体时也会发生这种情况吗?("suspended generator get.."??) 而且,这是否发生在 5 次 ndb.transaction 重试之后..?我在日志中看不到任何表明已进行任何重试的内容。

任何帮助是极大的赞赏。

0 投票
1 回答
1127 浏览

mysql - MySQL 5.6 信号量争用 row0purge.cc dict0dict.cc

服务器详情

  • MySQL 5.6.22
  • 256GB 内存
  • 4TB 固态硬盘
  • 32芯

背景资料

有一个删除过程,每秒大约执行 3 次删除。每秒 2-3k QPS。主要是选择。没有长时间运行的查询。

问题

有时,查询开始在 1-3 秒范围内而不是毫秒内运行。其中大部分处于“等待查询缓存锁定”状态。

问题

我想知道可能是什么原因。我会理解它是否是一致的,因为 DELETE 过程正在进行中,但它非常零星。与 dict0dict.cc 和 row0purge.cc 相关的信号量让我假设它与导致争用的 DELETES 相关。对此的任何想法都会很棒。