并发编程技术,优点,缺点

时间:2010-10-24 17:48:53

标签: java .net concurrency erlang

创建并发应用程序至少有三种众所周知的方法:

  1. 通过锁定进行多线程和内存同步(.NET,Java)。软件事务内存(link text)是另一种同步方法。

  2. 异步消息传递(Erlang)。

  3. 我想了解是否有其他方法,并讨论应用于大型分布式应用程序的这些方法的各种优缺点。我主要关注的是简化程序员的生活。

    例如,在我看来,当它们之间没有依赖关系时,使用多个线程很容易,这是非常罕见的。在所有其他情况下,线程同步代码变得非常麻烦,难以调试和推理。

4 个答案:

答案 0 :(得分:8)

我强烈建议您看看Rich Hickey的this presentation。它描述了构建高性能并发应用程序的方法,我认为这与基于锁定或消息传递的设计不同。

基本上它强调:

  • 无锁,多线程并发应用程序
  • 不可变持久数据结构
  • 软件事务内存处理的状态更改

并讨论这些原则如何影响Clojure语言的设计。

答案 1 :(得分:5)

阅读Herb SutterEffective Concurrency专栏,您也将受到启发。

答案 2 :(得分:2)

使用Java 5并发API,只要您利用高级实用程序并正确使用它们,在Java中进行并发编程就不一定非常麻烦和困难。我发现Brian Goetz的书“Java Concurrency in Practice”是一本关于这个主题的精彩读物。在我上一份工作中,我使用了本书中的技术,使一些图像处理算法可以扩展到多个CPU并管理CPU和磁盘绑定任务。我发现这是一次很棒的体验,我们取得了很好的成绩。

或者如果您使用的是C ++,您可以尝试使用#pragma指令使循环并行,但我自己从未使用过它。

答案 3 :(得分:1)

Erlang and OTP in Action中,作者提出了四种过程交流范式:

  • 带锁的共享内存

      

    构造( lock )用于   限制对共享资源的访问。   通常需要硬件支持   从内存系统来讲   特殊说明。这种方法可能存在的缺点包括:开销,内存系统争用点,调试难度,尤其是大量进程。

  • 软件交易记忆

      

    将内存视为数据库,   其中交易决定做什么   写和何时。这里的主要问题   由可能的代表   争论和数量   交易尝试失败。

  • 期货,承诺和类似的

      

    基本思想是 future 是一个   已经计算的结果   外包给不同的流程   (可能在不同的CPU或   机器),这可以传递   像任何其他对象一样。的情况下   可能会出现网络故障问题。

  • 消息传递

      

    同步或异步,in    Erlang风格