问题标签 [concurrency]

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 投票
10 回答
375922 浏览

multithreading - 什么是互斥锁?

互斥锁是一种经常用于解决多线程问题的编程概念。我对社区的问题:

什么是互斥体以及如何使用它?

0 投票
9 回答
1864 浏览

database - 支持多个并发用户的文件数据库建议

我需要一个可以存储网络驱动器并允许多个用户(最多 20 个)在没有任何服务器软件的情况下使用它的数据库。

我正在考虑 MS Access 或 Berkeley DB。

你能分享你在文件数据库方面的经验吗?
你用的是哪一个,有什么问题吗?

0 投票
3 回答
8759 浏览

c# - C# 中的并发集合

我正在寻找一种在C#中获取并发集合的方法,或者至少是一个支持并发 enumerator的集合。现在,我正在迭代的集合发生变化。 InvalidOperationException

我可以深度复制收藏并使用私人副本,但我想知道是否有更好的方法

代码片段:

- 编辑 -

我接受了答案,但也发现我需要确保写入集合的代码也需要尝试获取锁。

0 投票
6 回答
1469 浏览

java - Java 对象分配开销

我正在用 Java 编写一个不可变的 DOM 树,以简化来自多个线程的访问。*

但是,它确实需要尽可能快地支持插入和更新。而且由于它是不可变的,如果我对树的第 N 级上的节点进行更改,我需要分配至少 N 个新节点才能返回新树。

我的问题是,每次修改树时预先分配节点而不是创建新节点会更快吗?这将相当容易 - 保留一个包含数百个未使用节点的池,并从池中拉出一个,而不是在需要修改操作时创建一个。当没有其他事情发生时,我可以补充节点池。(如果不是很明显,在这个应用程序中执行时间将比堆空间更宝贵)

这样做值得吗?还有其他加快速度的技巧吗?

或者,有人知道不可变的 DOM 库是否已经存在吗?我搜索了,但找不到任何东西。

*注意:对于那些不熟悉不变性概念的人来说,它基本上意味着在对更改它的对象的任何操作上,该方法返回一个具有更改的对象的副本,而不是更改的对象目的。因此,如果另一个线程仍在读取对象,它将继续愉快地在“旧”版本上运行,而不知道已经进行了更改,而不是可怕地崩溃。见http://www.javapractices.com/topic/TopicAction.do?Id=29

0 投票
9 回答
24801 浏览

java - 以编程方式确定哪个 Java 线程持有锁

是否可以在运行时以编程方式检查持有给定对象锁的线程的名称?

0 投票
7 回答
23096 浏览

c# - 以只读方式返回集合

我在多线程环境中有一个对象,它维护着一组信息,例如:

我目前已return data;用 a 包裹ReaderWriterLockSlim以保护集合免受共享违规。但是,为了更加确定,我想将集合作为只读返回,以便调用代码无法对集合进行更改,只能查看已经存在的内容。这是可能吗?

0 投票
9 回答
77617 浏览

ruby - ruby 有真正的多线程吗?

我知道 ruby​​ 使用绿色线程的“合作”线程。如何在我的应用程序中创建真正的“操作系统级”线程以利用多个 cpu 内核进行处理?

0 投票
9 回答
826 浏览

concurrency - 如何告诉多核/多 CPU 机器并行处理循环中的函数调用?

我目前正在设计一个应用程序,该应用程序具有一个模块,该模块将从数据库中加载大量数据,并根据情况通过各种计算将其减少到更小的集合。

许多更密集的操作具有确定性,并且适合并行处理。

如果我有一个循环遍历从数据库到达的大量数据块,并且每个数据块都调用一个没有副作用的确定性函数,我将如何制作它以便程序不等待函数返回而是设置下一个电话,所以他们可以并行处理?一种天真的方法来证明这个原则现在对我有用。

我已经阅读了 Google 的 MapReduce 论文,虽然我可以在很多地方使用总体原理,但我现在不会针对大型集群,而是将其作为 1.0 版的单个多核或多 CPU 机器. 所以目前,我不确定我是否可以真正使用该库,或者自己必须推出一个简化的基本版本。

我处于设计过程的早期阶段,到目前为止,我将 C-something(用于速度关键位)和 Python(用于生产力关键位)作为我的语言。如果有令人信服的理由,我可能会切换,但到目前为止我对我的选择感到满意。

请注意,我知道从数据库中检索下一个块可能比处理当前块需要更长的时间,然后整个过程将受 I/O 限制。但是,我现在假设它不是,并且在实践中使用数据库集群或内存缓存或其他东西在这一点上不受 I/O 限制。

0 投票
4 回答
62925 浏览

c# - 是 C# 中的 bool 读/写原子

在 C# 中访问bool字段是原子的吗?特别是,我是否需要锁定:

0 投票
3 回答
1289 浏览

php - 测试/调试/修复 PHP 并发问题的工具?

我发现自己在 PHP 中使用 memcached 做了一些相对高级的工作。考虑和解决由缓存的无锁特性引起的竞争条件和并发问题正在成为一种精神斗争。

PHP 在并发方面的工具似乎很差(线程,有人吗?),所以我想知道是否有任何解决方案可以正确测试/调试它。

我不想等到两个用户请求两个脚本,它们将同时作为并行进程运行并导致并发问题,这会让我摸不着头脑,或者直到它滚雪球进入 clusterfsck 时我才注意到。

我应该知道的任何神奇的 PHP 并发魔杖?