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

java - 安全发布的单元测试

您将如何对 Java 中的安全发布保证进行单元测试?

具体来说:

我有一个 Cache 接口,它有一个方法 getOrLoad(K key, ObjectLoader loader)。问题是,如果缓存找不到给定键的对象,那么它必须从 ObjectLoader 实例加载它。但是,缓存需要保证从加载器加载对象并将其放入缓存中的行为构成安全发布。

我现在正在为此 Cache 接口编写一个通用的 junit 测试,我想知道如何测试 Cache 实现是否遵守这个安全发布保证。

有任何想法吗?实际代码位于代码存储库的 test-systest 模块部分,以防您想要查看真实文件。

0 投票
2 回答
1306 浏览

c# - 如何管理在 C# 中插入的并发性?

许多乐观并发示例通过使用数据库时间戳或标志来引用更新。

但是,我想处理 INSERTS 的乐观并发

为了说明这里是一个假的场景:

多个用户可以同时插入一个日记帐分录,但每个日期只允许一个日记帐分录。

由于多个用户可以创建日记帐分录,因此没有任何并发​​控制,我最终可以在同一日期创建多个日记帐分录。

在不使用数据库(即数据库唯一键约束)的情况下,如何防止在应用层发生这种情况

0 投票
2 回答
1192 浏览

sql-server - 您会为 SQL Server 推荐哪种乐观锁定方案?

我正在使用 .Net 1.1 和 SQL Server 2000 构建企业应用程序。我使用读提交隔离级别。然而,非功能性需求的变化使得有必要对不可重复读取和幻像采取措施。我看到两个选项:

  1. 引入行版本控制以检查行在事务中读取后是否已被修改。这是通过将 VersionId 列添加到表 abd 来完成的,该列在行更改时递增该值。这将解决问题,但需要我们重写所有存储过程和应用程序的数据访问层。

  2. 迁移到 SQL Server 2005 并使用快照隔离级别。这样可以省去我们重写代码的麻烦,但也有一些挑战:快照隔离级别在 .Net 1.1 中是未知的,因此我们必须额外往返服务器以手动设置它。湾。我们不能在存储过程中使用临时表,因为快照隔离级别不允许更改 tempdb 的架构。我不知道如何解决这个问题。

任何想法或建议都非常好

0 投票
1 回答
554 浏览

database - 寻找关于分布式系统中记录锁定的建议

在记录锁定方面,我们正在尝试为我们的团队提供推荐的设计模式。典型的思想流派是这样的: 1. 用户从列表中选择一条记录 2. 用用户 ID 锁定记录 3. 加载锁定的记录记录(没有锁定,然后有人打败它)。

我是否遗漏了什么,或者这似乎是唯一的方法?((在我们的例子中,乐观锁定对于最终用户来说会很麻烦和困惑。编辑通常是相当大量的。))

0 投票
5 回答
2527 浏览

java - 在 Java 6 中用于同时访问列表的最佳方法

我有一个被多个线程访问的 List 对象。更新列表的主要是一个线程,在某些情况下是两个线程。根据正在处理的用户请求的数量,可以从该列表中读取一到五个线程。该列表不是要执行的任务队列,它是同时检索和更新的域对象的列表。

现在有几种方法可以使对该列表的访问成为线程安全的:
- 使用同步块
- 使用普通(即读写操作共享相同的锁)
- 使用 ReadWriteLock -
使用新的ConcurrentBLLABLBA集合类之一

我的问题:
考虑到关键部分通常不包含很多操作(主要是添加/删除/插入或从列表中获取元素),最佳的使用方法是什么?
你能推荐另一种方法,上面没有列出吗?

一些限制
- 最佳性能至关重要,内存使用量不大
- 它必须是有序列表(当前在ArrayList上同步),尽管不是排序列表(即不使用 Comparable 或 Comparator 排序,而是根据插入顺序)
-列表很大,最多包含 100000 个域对象,因此使用 CopyOnWriteArrayList 之类的东西是不可行
的 - 写入/更新关键部分通常非常快,执行简单的添加/删除/插入或替换(设置​​)
- 读取操作将主要执行一个 elementAt(index) 调用大部分时间,虽然一些读取操作可能会进行二进制搜索,或者 indexOf(element)
- 没有对列表进行直接迭代,尽管像 indexOf(..) 这样的操作将遍历列表

0 投票
1 回答
595 浏览

java - 为什么 AbstractQueuedSynchronizer 在获取锁时会中断

我正在查看 java.uti.concurrent.locks.AbstractQueuedSynchronizer 的源代码,acquire() 方法看起来像这样 -

为什么它会中断调用acquire()的线程?如果在线程 run() 方法中的某处进行了检查,那么它可能会在调用 acquire() 之后通过,这可能是不可取的和没有想到的?

有人想弄清楚为什么上面的代码会这样做吗?

0 投票
2 回答
3884 浏览

python - Python中的键盘可中断阻塞队列

它似乎

是键盘可中断(ctrl-c)而

不是。我总是可以创建一个循环;

但这似乎是一件奇怪的事情。

那么,有没有办法让一个无限期等待但键盘可中断的 Queue.get()?

0 投票
2 回答
3455 浏览

concurrency - 如何让已经编写好的并发程序在 GPU 阵列上运行?

我有一个用 Erlang 编写的神经网络,我刚买了一张带有 240 核 GPU 的 GeForce GTX 260 卡。使用CUDA作为胶水在显卡上运行它是微不足道的吗?

0 投票
7 回答
32827 浏览

java - 每个处理器的线程数

在 Java 中,是否有一种编程方式来找出 CPU 支持多少并发线程?

更新

澄清一下,我不是想用线程敲击 CPU,而且我知道 Runtime.getRuntime().availableProcessors() 函数,它为我提供了我正在寻找的部分信息。

我想知道是否有办法自动调整线程池的大小,以便:

  • 如果我在使用了 1 年的服务器上运行,我会得到 2 个线程(每个 CPU 1 个线程 x 任意乘数 2)
  • 如果我从现在开始两年后切换到 Intel i7 四核(每个内核支持 2 个线程),我将获得 16 个线程(每个 CPU 2 个逻辑线程 x 4 个 CPU x 2 的任意乘数)。
  • 相反,如果我使用八核 Ultrasparc T2 服务器(每个内核支持 8 个线程),我得到 128 个线程(每个 CPU 8 个线程 x 8 个 CPU x 2 的任意乘数)
  • 如果我在由 30 台不同机器组成的集群上部署相同的软件,这些机器可能在不同年份购买,我不需要阅读 CPU 规格并为每台机器设置配置选项。
0 投票
6 回答
7535 浏览

php - 在 PHP 中锁定 NFS 文件

我最新的 web 应用程序的一部分需要写入文件作为其日志记录的一部分。我注意到的一个问题是,如果有几个并发用户,写入可以相互覆盖(而不是附加到文件)。我认为这是因为目标文件可以同时在多个地方打开。

flock(...)通常很棒,但它似乎不适用于 NFS ......这对我来说是一个大问题,因为生产服务器使用 NFS 阵列。

我见过的最接近实际解决方案的事情是尝试创建一个锁目录并等待它被创建。说这缺乏优雅是对今年,可能是十年的轻描淡写。

有更好的想法吗?

编辑:我应该补充一点,我在服务器上没有 root,并且以另一种方式进行存储在短期内并不可行,尤其是在我的最后期限内。