Java 并行编程技术,优缺点
创建并发应用程序至少有三种众所周知的方法:Java 并行编程技术,优缺点,java,.net,concurrency,erlang,Java,.net,Concurrency,Erlang,创建并发应用程序至少有三种众所周知的方法: 通过锁定(.NET,Java)实现多线程和内存同步。软件事务内存()是另一种同步方法 异步消息传递(Erlang) 我想了解是否还有其他方法,并讨论这些方法应用于大型分布式应用程序的各种优缺点。我的主要关注点是简化程序员的生活 例如,在我看来,当多个线程之间没有依赖关系时,使用多个线程是很容易的,这是非常罕见的。在所有其他情况下,线程同步代码变得相当麻烦,难以调试和推理 Read’s专栏,你也会受到启发。我强烈推荐阅读Rich Hickey的文章。它描
例如,在我看来,当多个线程之间没有依赖关系时,使用多个线程是很容易的,这是非常罕见的。在所有其他情况下,线程同步代码变得相当麻烦,难以调试和推理 Read’s专栏,你也会受到启发。我强烈推荐阅读Rich Hickey的文章。它描述了一种构建高性能并发应用程序的方法,我认为这种方法不同于基于锁或消息传递的设计 它基本上强调:
- 无锁、多线程并发应用程序
- 不变的持久数据结构
- 软件事务内存处理的状态更改
并讨论这些原则如何影响语言的设计。使用Java 5并发API,只要您利用高级实用程序并正确使用它们,用Java进行并发编程就不必繁琐和困难。我发现Brian Goetz的《Java并发实践》一书是关于这一主题的优秀读物。在我的上一份工作中,我使用了本书中的技术,使一些图像处理算法扩展到多个CPU,并将CPU和磁盘绑定的任务流水线化。我发现这是一次很棒的经历,我们取得了优异的成绩
或者如果你使用C++,你可以试试OpenMP,它使用了γ-语用指令来使循环并行,虽然我自己从来没有使用过。
- 带锁的共享内存 构造(锁)用于 限制对共享资源的访问。 通常需要硬件支持 从内存系统中,在 特别说明。这种方法可能存在的缺点包括:开销、内存系统中的争用点、调试困难,尤其是在进程数量巨大的情况下
- 软件事务存储器 内存被视为数据库, 事务在哪里决定要做什么 写什么,什么时候写。这里的主要问题 由可能的 争论和争论的数量 失败的事务尝试
- 期货、承诺及类似事项 其基本思想是未来是一个整体 已完成的计算结果 外包到不同的流程 (可能在不同的CPU上或 机器)并且可以传递 和其他物体一样。万一 可能会出现网络故障问题
- 消息传递 同步或异步,在 二郎风格
parallel\u、parallel\u映射
和parallel\u reduce
,但对并发性没有帮助。类似地,也有像Newsquak这样的语言是面向并发的,但不提供并行处理。+1,好书和建议-现在很少需要使用Java中的低级原语编写复杂的线程安全代码。审查和推理使用这些较新API的代码也容易得多。Microsoft发布了带有.NET 4.0的TPL,这是一组类似于Java的线程的高级抽象。虽然它确实简化了令人尴尬的并行问题的编码,但它对管理共享状态并没有多大帮助,反而给人一种简单的错误印象。很好的发现。虽然我很欣赏他对线程同步的深入研究,但他主要关注线程、锁定和原子操作,这只是并发的众多方法之一。他在几篇文章中提到了异步消息传递,但IMHO并没有走得很远。此外,他的文章还说明了正确使用多线程是多么困难。我仍然在做关于各种内存模型的噩梦。是的,Sutters专栏的重点是使传统的基于锁的同步更易于管理,而不是探索其他技术。不过还是一本不错的书。