问题标签 [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.
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 中)正在询问类似的事情。“建设性”的结论非常相似。但是这一次,一些新的观点出来了,可能我问的方式有点不同。仅供参考。
有关的:
其实我很感兴趣有人能以某种全新的角度回答这个问题,这可以启发我的思想,提供一些以前未知的想法。
但由于没有建设性,它已关闭。:-)
java - 多线程有用到什么程度?
- 我有一个任务可以分成多个独立的子任务,每个子任务都可以在 Java 的单独线程中运行。
- 我想了解什么是最佳线程数,之后增加线程数不会带来任何性能提升。
mysql - 如何保证 SQL 行之间的约束?
我们正在开发在线日程应用程序。一个时间表可以由多个用户同时编辑。有一个非常重要的业务约束。一天内必须只有三个事件。
从技术上讲和简化,数据库中有一个带有列的表:| 编号 | 活动 | 日期|。应用程序在事务“select...count...where...”中运行,如果结果小于 3,则插入新事件。
可以使用哪些方法来保证两个线程不会在一天内创建四个事件?这是一个经典的 check-and-write 问题。我们想知道如何在数据库级别解决它?
使用事务并不能保证在第二个事务中另一个线程不会做同样的事情:检查事件数是否小于 3 并进行插入。锁定整个表是不可接受的,因为它会减少响应时间、并发性等。
应用程序是使用 Spring、Hibernate、MySQL 用 Java 开发的。
提前感谢您的任何建议。
java - 在满足的条件下停止线程池
我正在使用 ExecutorService 来处理数以千计的小型独立任务。每个任务在完成时都会存储结果(为真或假)。
因此,如果任务找到了答案,我不想处理所有任务,而是过早关闭线程池!感觉就像我在这里遗漏了一些非常明显的东西......
parallel-processing - 并发程序、并行程序和分布式程序的区别
我只是在学习编程结构;特别是我正在研究并发程序。我遇到了几篇文章,其中并发程序、并行程序和分布式程序之间的区别似乎令人困惑。
我的理解如下:
并发程序:同时执行多个任务或给出这样做的概念
并行程序:解决此类问题的算法允许同时执行一些相关的任务
分布式程序:与可用资源有关,而不是相应算法中固有的并行性。不止一种计算资源可用于解决该问题。
有人可以指出我对这些术语的正确和详细解释吗?
c# - 如何创建一个无锁集合的集合
我需要创建一个集合集合。该集合由多个线程调用以添加项目和查找项目。一旦添加,项目将不会被删除。目前,在添加元素时,我需要锁定整个集合。有没有办法让它无锁。或者我可以使用更好的数据结构或模式吗?这是我的代码的简化版本:
java - 如何使用信号量在 Java 中对餐饮哲学家进行编码?
我必须使用信号量编写 Java 中哲学家就餐问题的解决方案。信号量是“手工”完成的,创建了一个信号量类。看起来像这样:
如果我有一个解决方案可以避免死锁、饥饿、活锁等并发问题,我会很好。我想过让每个哲学家在他自己的时间吃饭,但我不知道如何使用信号量来实现这一点。如何用 Java 中的信号量解决哲学家就餐问题?
任何帮助表示赞赏。
go - Go 中的并发例程
我想编写三个并发例程,它们相互发送整数。现在,我已经实现了两个并发例程,它们相互发送整数。
但是,当我想添加另一个例程来向/从上述例程发送和接收整数时,它会给出诸如“抛出:所有 goroutines 都处于睡眠状态 - 死锁!”之类的错误。下面是我的代码:
任何人都可以帮助我,我的错误在哪里?任何人都可以帮助我,是否可以创建双向通道或者是否可以为 int、string 等创建一个公共通道?
go - Google Go 语言中的并发例程
是否有可能:假设,我有 3 个并发例程可以相互发送整数。现在,假设并发例程 2 和 3 都向并发例程 1 发送一个整数。例程 1 是否有可能同时获取两个值并进一步处理它?为了清楚起见,我有以下代码:
在这里,在这个例子中,例程 1 可以向例程 2 或 3 发送一个 int。我假设它是例程 3。现在假设例程 3 也向例程 2 发送一个 int。例程 2 是否可以采用这两个值并处理进一步(动态并发例程)?任何机构都可以帮助相应地修改这个程序。
concurrency - 如何知道 CAS 指令是否成功?
典型的比较和交换指令不会报告它是否成功。相反,它无论如何都只返回旧值。如何快速确定 CAS 是否成功更新了值?