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

java - 线程同步问题(java中)

我的 java 应用程序有一个加载任务,它需要两个可以并行化的服务器调用。所以我启动了一个 Thread t1 (执行task1)和一个 Thread t2 (用于task2)。然后,我想在其他两个任务(1 和 2)都结束时执行特定任务task3 。自然我不知道task1task2中的哪一个会先完成......

哪种方法对您来说是最简单(也是最安全)的编码方式?

感谢您的帮助

0 投票
7 回答
58730 浏览

java - CountDownLatch 与信号量

使用有什么好处吗

java.util.concurrent.CountdownLatch

代替

java.util.concurrent.Semaphore ?

据我所知,以下片段几乎是等价的:

1.信号量

2:倒计时锁存器

除了在 #2 的情况下,闩锁不能被重用,更重要的是,您需要提前知道将创建多少线程(或者等到它们都启动后再创建闩锁。)

那么在什么情况下闩锁可能更可取呢?

0 投票
2 回答
1295 浏览

performance - 衡量应用程序性能的技术

我维护了一个应用程序,在两年的时间里,由于插入的新用户/新数据的数量,它不断需要新硬件才能使用。然而,有时很难证明投资的合理性。

我开始想知道——如何确定 Web 应用程序当前支持的最大用户数?

我曾想过使用 JMeter 脚本,但是当必须模拟文件传输和决策树时,它们的实现会变得非常糟糕。你们都用什么?

0 投票
8 回答
3589 浏览

c++ - 我是否需要在多线程环境中保护对 STL 容器的读取访问?

我有一个 std::list<> 容器和这些线程:

  • 一个无限期添加元素的作家线程。

  • 一个读取器/写入器线程,在可用时读取和删除元素。

  • 访问容器大小的几个读取器线程(通过使用 size() 方法)

有一个普通的互斥锁可以保护前两个线程对列表的访问。我的问题是,大小读取器线程是否也需要获取此互斥锁?我应该使用读/写互斥锁吗?

我在使用 Visual C++ 6 的 Windows 环境中。

更新:看起来答案还不清楚。总结主要疑问:考虑到我不需要确切的值(即我可以假设一个+/- 1 个变化)?竞争条件如何使我的 size() 调用返回无效值(即与好的值完全无关的值)?

回答: 通常,必须保护读者线程以避免竞争条件。尽管如此,在我看来,上述更新中提到的一些问题还没有得到解答。

提前致谢!

谢谢大家的答案!

0 投票
1 回答
376 浏览

concurrency - RIA 中的并发性

这将是我在这个平台上的第一个问题。我使用 Flex、WebORB 和 ASP.NET 进行了大量开发。我们已经解决了消息传递的并发问题(悲观并发控制)。这工作得很好,但它也使整个应用程序依赖于消息传递。没有消息传递,没有并发控制。我知道 ASP.NET 在 DataSets 中有版本控制,但是如果您正在使用 RIA,您将如何使用它。似乎很难将每个数据集存储在客户端的会话中......因此,如果客户端需要所有产品,我需要将数据集存储在客户端的会话中。当客户将某些内容更改为产品并保存产品时,我可以更新数据集(存储在会话中)并尝试保存它...... 看起来工作量很大,而且会用到很多内存(因为那些产品会保存在客户端的内存中,所以数据集需要保存在服务器端会话中)。我认为最简单的方法是为所有 DTO 提供版本号。如果客户端尝试保存 DTO,我可以将版本号与数据库中的版本号进行比较。

利文·卡登

0 投票
4 回答
1566 浏览

multithreading - 了解更多关于命令式并发编程的最佳方式是什么?

最近不得不编写我的第一个“正确的”多线程代码,并意识到我对“命令式”(即 C++/C#/Java 等使用的并发模型)并发编程技术知之甚少。

有什么资源(书籍和在线教程等)可以更多地了解这个编程领域?

注意:我不是在询问可以说更好的并发模型(Erlang 的消息传递或 Clojure 的 STM),只是命令式语言中使用的范例。

0 投票
3 回答
10811 浏览

c# - LINQ to SQL 和并发问题

我们正在尝试建立一个大批量订单记录系统。有三个主表: 1. Orders 2. OrderDetails 3. OrderShipment

Shipment 表包含每个订单的 n 条记录,并且在客户接受订单之前可以更改任何记录的发货条目,之后订单将被冻结。(业务需求)

尽管这在现实世界的场景中可能不会发生……在我们的负载测试期间,我们得到了 System.Data.Linq.ChangeConflictException 异常。在事务中结束提交也无济于事。我们不能强制 LINQ 在整个更新操作期间锁定行吗?

有没有其他方法可以克服这个问题?

0 投票
4 回答
1356 浏览

sql - MS SQL 并发,多余的锁

我在 ms sql 2000 上有一个数据库,一次被数百名用户访问。有大量使用 Reporting Services 2005 访问同一数据库的报告。

当有大量报告正在运行并且人们同时使用数据库时,我们会看到阻塞进程到系统开始为在这种情况下一段时间后进行的任何事务提供超时的级别。

是否有一种将阻塞最小化的全局方法,以便事务可以继续流动。

0 投票
3 回答
1892 浏览

database - Web 服务和数据库并发

我正在构建一个 .NET 客户端应用程序(C#、WinForms),它使用 Web 服务与数据库进行交互。客户端将使用 WAN 或 VPN 从远程位置运行,因此使用 Web 服务而不是直接访问数据库的想法。

我现在正在努力解决的问题是如何处理数据库并发。即如果两个不同位置的人更新了相同的数据,我该如何处理呢?我正在考虑在每个数据库记录上使用时间戳并将其作为更新 where 子句的一部分,但这意味着时间戳必须通过 Web 服务接口来回移动,这看起来有点难看。

解决这个问题的最佳方法是什么?

0 投票
3 回答
6913 浏览

asp.net - Lucene.Net 是否管理访问同一索引的多个线程,一个索引而另一个正在搜索?

在将 Lucene.Net 与 ASP.NET 一起使用时,我可以想象一个 Web 请求可以触发对索引的更新,而另一个 Web 请求正在执行搜索。Lucene.Net 是否内置了管理并发访问的能力,还是我必须管理它,以避免“被另一个进程使用”错误?

编辑:在阅读文档和实验之后,这就是我认为我学到的:有两个问题,线程安全和并发。多线程是“安全的”,因为您不能对索引做任何坏事。但是,这是安全的,代价是一次只有一个对象锁定索引。第二个对象会出现并抛出异常。因此,您不能打开搜索并期望另一个线程中的作者能够更新索引。如果一个线程忙于更新索引,那么尝试创建搜索器将会失败。

此外,搜索者会看到他们打开时的索引,因此如果您保留它们并更新索引,他们将不会看到更新。

我希望我的搜索者看到最新的更新。

我的设计,到目前为止似乎还有效,是我的作者和搜索者共享一个锁,这样他们就不会失败——他们只是等待——直到当前的写入或搜索完成。