Questions tagged «concurrency»

在计算机科学中,并发是系统的属性,其中可以在重叠的时间段内执行多个计算。这些计算可以在同一芯片的多个内核上执行,也可以在同一处理器上抢占时间共享线程,或者在物理上分开的处理器上执行。






7
Haskell对Node.js的响应是什么?
我相信Erlang社区不会羡慕Node.js,因为它本身就进行非阻塞I / O,并具有将部署轻松扩展到一个以上处理器(Node.js甚至没有内置的功能)的方法。有关更多详细信息,请访问http://journal.dedasys.com/2010/04/29/erlang-vs-node-js和Node.js或Erlang 那Haskell呢?Haskell是否可以提供Node.js的某些好处,即一种避免使用I / O而不使用多线程编程的干净解决方案? Node.js有很多吸引人的地方 事件:无线程操作,程序员仅提供回调(如Snap框架中一样) 回调保证在单个线程中运行:不可能出现竞争条件。 漂亮又简单的UNIX友好API。奖励:出色的HTTP支持。DNS也可用。 默认情况下,每个I / O都是异步的。这样可以更轻松地避免锁定。但是,回调中过多的CPU处理会影响其他连接(在这种情况下,任务应拆分为较小的子任务并重新计划)。 客户端和服务器端使用相同的语言。(但是,我认为这一点没有太大价值。jQuery和Node.js共享事件编程模型,但其余部分却大不相同。我只是看不到如何在服务器端和客户端之间共享代码。在实践中很有用。) 所有这些都包装在一个产品中。

5
为什么该Java程序终止了,尽管它显然不应该(也不应该)终止?
今天,我实验室中的一个敏感操作完全出错。电子显微镜上的执行器越过边界,经过一连串的事件,我损失了1200万美元的设备。我将故障模块中的40,000多行缩小为: import java.util.*; class A { static Point currentPos = new Point(1,2); static class Point { int x; int y; Point(int x, int y) { this.x = x; this.y = y; } } public static void main(String[] args) { new Thread() { void f(Point p) { synchronized(this) {} if (p.x+1 …

5
LMAX的破坏者模式如何工作?
我试图了解破坏者的模式。我已经看过InfoQ视频,并试图阅读他们的论文。我知道其中涉及一个环形缓冲区,它被初始化为一个非常大的数组,以利用缓存的局部性,消除新内存的分配。 听起来好像有一个或多个原子整数可以跟踪位置。每个“事件”似乎都有一个唯一的ID,并且可以通过找到相对于环大小等的模数来找到它在环中的位置。 不幸的是,我对它的工作方式没有直观的认识。我完成了许多交易应用程序,研究了参与者模型,研究了SEDA等。 他们在演讲中提到,这种模式基本上就是路由器的工作方式。但是我也没有找到关于路由器工作方式的任何好的描述。 是否有一些更好的解释的好指针?


30
您在Java中遇到的最常见的并发问题是什么?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 这是有关Java常见并发问题的各种民意测验。一个例子可能是经典的死锁或竞争条件,或者是Swing中的EDT线程错误。我不仅对可能出现的问题的范围感兴趣,而且对最常见的问题感兴趣。因此,请在每个评论中留下一个Java并发错误的特定答案,如果看到遇到的评论,请投票。

10
同步与锁定
java.util.concurrentAPI提供了一个名为的类Lock,该类将基本上对控件进行序列化以访问关键资源。它给出了诸如park()和的方法unpark()。 如果我们可以使用synchronized关键字以及using wait()和notify() notifyAll()方法,我们可以做类似的事情。 我想知道其中哪一个在实践中更好,为什么?

8
同步静态方法如何在Java中工作,我可以使用它来加载Hibernate实体吗?
如果我有一个带有静态方法的util类,它将调用Hibernate函数来完成基本数据访问。我想知道是否使该方法synchronized是确保线程安全的正确方法。 我希望这可以防止对同一数据库实例的信息访问。但是,我现在确定当getObjectById特定类调用以下代码时,是否阻止所有类调用以下代码。 public class Utils { public static synchronized Object getObjectById (Class objclass, Long id) { // call hibernate class Session session = new Configuration().configure().buildSessionFactory().openSession(); Object obj = session.load(objclass, id); session.close(); return obj; } // other static methods }

6
为什么创建线程据说很昂贵?
Java教程说创建线程很昂贵。但是为什么价格昂贵呢?当创建Java线程使创建过程变得昂贵时,究竟发生了什么?我认为该说法是正确的,但是我只是对JVM中的线程创建机制感兴趣。 线程生命周期开销。线程创建和拆除不是免费的。实际开销因平台而异,但是线程创建会花费时间,从而在请求处理中引入延迟,并且需要JVM和OS进行某些处理活动。如果请求频繁且轻量(如大多数服务器应用程序中一样),则为每个请求创建一个新线程可能会消耗大量计算资源。 来自Java并发实践 作者:Brian Goetz,Tim Peierls,Joshua Bloch,Joseph Bowbeer,David Holmes,Doug Lea 打印ISBN-10:0-321-34960-1



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.