问题标签 [concurrent-programming]

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 回答
1194 浏览

java - 在多线程方面比较 java 和 scala

我只是听到并看到人们说 scala 是为 MultiThread 设计的,尽管它实际上是用于通用目的。

它声称“问题在于,虽然您可以在 Java 中使类成为线程安全的(如果您知道自己在做什么),但 Scala 使之变得简单而自然。”

确实 AKKA 和 Lift 是用 scala 编写的。(实际上是 java 和 scala)

但是 java 也通过 java.util.concurrent 的新包在这方面进行了改进。那么为什么 AKKA 和 Lift 没有在 JAVA 中诞生呢?

也许你会说 scala 让 java 看起来像 C。:-)

任何人都可以对此进行更多的见解或更深入的思考吗?

我知道可以混合 JAVA 和 scala 的事实。Scala 能够无缝调用 Java 代码。那么java有什么,scala也有。

但是,不管不同的语法,scala 真正改进了 java 尚未完成的功能是什么?

只有一些设计,如演员/代理人或其他?(注意 Actors/Agents 不能解决多线程中的所有问题。)

或者 scala 编译器和采用一些函数式语言语法真的比 java 更重要或有帮助吗?

我听说 scala 将能够采用 XText 的一些消息。为了能够利用 XText 编写线程逻辑,不确定这是否正确。

Scala 看起来像是多种语言的混合体,使用这种方法可以更容易地解决这方面的问题?

更新

感谢您从不同角度的出色回答。我觉得他们都很好。不管你站在哪一边。

编辑

下面的主题(在一年前的 SO 中)正在询问类似的事情。“建设性”的结论非常相似。但是这一次,一些新的观点出来了,可能我问的方式有点不同。仅供参考。

有关的:

其实我很感兴趣有人能以某种全新的角度回答这个问题,这可以启发我的思想,提供一些以前未知的想法。

但由于没有建设性,它已关闭。:-)

0 投票
1 回答
123 浏览

java - 多线程有用到什么程度?

  • 我有一个任务可以分成多个独立的子任务,每个子任务都可以在 Java 的单独线程中运行。
  • 我想了解什么是最佳线程数,之后增加线程数不会带来任何性能提升。
0 投票
3 回答
126 浏览

mysql - 如何保证 SQL 行之间的约束?

我们正在开发在线日程应用程序。一个时间表可以由多个用户同时编辑。有一个非常重要的业务约束。一天内必须只有三个事件。

从技术上讲和简化,数据库中有一个带有列的表:| 编号 | 活动 | 日期|。应用程序在事务“select...count...where...”中运行,如果结果小于 3,则插入新事件。

可以使用哪些方法来保证两个线程不会在一天内创建四个事件?这是一个经典的 check-and-write 问题。我们想知道如何在数据库级别解决它?

使用事务并不能保证在第二个事务中另一个线程不会做同样的事情:检查事件数是否小于 3 并进行插入。锁定整个表是不可接受的,因为它会减少响应时间、并发性等。

应用程序是使用 Spring、Hibernate、MySQL 用 Ja​​va 开发的。

提前感谢您的任何建议。

0 投票
2 回答
346 浏览

java - 在满足的条件下停止线程池

我正在使用 ExecutorService 来处理数以千计的小型独立任务。每个任务在完成时都会存储结果(为真或假)。

因此,如果任务找到了答案,我不想处理所有任务,而是过早关闭线程池!感觉就像我在这里遗漏了一些非常明显的东西......

0 投票
1 回答
1947 浏览

parallel-processing - 并发程序、并行程序和分布式程序的区别

我只是在学习编程结构;特别是我正在研究并发程序。我遇到了几篇文章,其中并发程序、并行程序和分布式程序之间的区别似乎令人困惑。

我的理解如下:

并发程序:同时执行多个任务或给出这样做的概念

并行程序:解决此类问题的算法允许同时执行一些相关的任务

分布式程序:与可用资源有关,而不是相应算法中固有的并行性。不止一种计算资源可用于解决该问题。

有人可以指出我对这些术语的正确和详细解释吗?

0 投票
5 回答
412 浏览

c# - 如何创建一个无锁集合的集合

我需要创建一个集合集合。该集合由多个线程调用以添加项目和查找项目。一旦添加,项目将不会被删除。目前,在添加元素时,我需要锁定整个集合。有没有办法让它无锁。或者我可以使用更好的数据结构或模式吗?这是我的代码的简化版本:

0 投票
2 回答
3596 浏览

java - 如何使用信号量在 Java 中对餐饮哲学家进行编码?

我必须使用信号量编写 Java 中哲学家就餐问题的解决方案。信号量是“手工”完成的,创建了一个信号量类。看起来像这样:

如果我有一个解决方案可以避免死锁、饥饿、活锁等并发问题,我会很好。我想过让每个哲学家在他自己的时间吃饭,但我不知道如何使用信号量来实现这一点。如何用 Java 中的信号量解决哲学家就餐问题?

任何帮助表示赞赏。

0 投票
1 回答
150 浏览

go - Go 中的并发例程

我想编写三个并发例程,它们相互发送整数。现在,我已经实现了两个并发例程,它们相互发送整数。

但是,当我想添加另一个例程来向/从上述例程发送和接收整数时,它会给出诸如“抛出:所有 goroutines 都处于睡眠状态 - 死锁!”之类的错误。下面是我的代码:

任何人都可以帮助我,我的错误在哪里?任何人都可以帮助我,是否可以创建双向通道或者是否可以为 int、string 等创建一个公共通道?

0 投票
2 回答
292 浏览

go - Google Go 语言中的并发例程

是否有可能:假设,我有 3 个并发例程可以相互发送整数。现在,假设并发例程 2 和 3 都向并发例程 1 发送一个整数。例程 1 是否有可能同时获取两个值并进一步处理它?为了清楚起见,我有以下代码:

在这里,在这个例子中,例程 1 可以向例程 2 或 3 发送一个 int。我假设它是例程 3。现在假设例程 3 也向例程 2 发送一个 int。例程 2 是否可以采用这两个值并处理进一步(动态并发例程)?任何机构都可以帮助相应地修改这个程序。

0 投票
1 回答
213 浏览

concurrency - 如何知道 CAS 指令是否成功?

典型的比较和交换指令不会报告它是否成功。相反,它无论如何都只返回旧值。如何快速确定 CAS 是否成功更新了值?