并发中的下一个


9

在过去的一年中,我一直致力于Java并发方面的工作,并且已经构建并处理了许多并发包。因此,就并发世界的发展而言,我很有信心。此外,我非常有兴趣学习和了解有关并发编程的更多信息。

但是我无法回答自己下一步该怎么办?我应该学习或从事哪些额外工作,以继承更多与多核处理相关的技能。是否有与多核处理相关的好书(阅读并喜欢“实践中的并发性”和“ Java并发编程”)或与多核处理相关的资源,这样我就可以进入下一个级别了?


如果您错过了理论基础,请立即学习:en.wikipedia.org/wiki/Pi-calculus
SK-logic

Answers:


8

免责声明-我不是并发专家,但我的合著者是,我正在模仿他:-)

既然您已经阅读了道格·李(Doug Lea)和布莱恩·格茨(Brian Goetz)的书,那么您肯定涵盖了迄今为止最好的材料。

展望未来,Java 7中有了新的并发增强功能。最明显的是Fork / Join框架和新的异步NIO API。

Java 8将通过lambda / parallel集合进一步改进并发性。

认真考虑的另一件事是处理并发的替代方法。直言不讳,无论API改进了多少,Java的“锁定可变对象”方法总是容易出错。因此,我建议将Scala的参与者模型和Clojure的STM视为在保持与Java互操作性的同时处理并发问题的替代方法。

[警告->自我宣传]因此,我自然会推荐我们即将出版的书《The Well-Grounded Java Developer》,其中涵盖了我上面提到的所有内容:-)。[/ warning]

唯恐我忘记了,Groovy也有一个强烈推荐的Gpars库,尽管我个人没有使用过。


哈非常感谢这本书:)。你能不能也请建议作为推荐本书是不是可以在这里(地方版)在India.PS其他一些好书:并发编程实践是一本书的瑰宝
Jatin

@Martijn,整洁!我已经对Groovy和Scala感到好奇了一段时间,并想尝试一下以了解更多信息。您的书是否适合这些语言的初学者使用?
maple_shaft

@Jatin Puri-我真的不了解“并发实践”和“ Java并发编程”方面的任何其他标题,其中有Henry Wong的“ Java Threads” O'Reilly标题,但仅此而已。
Martijn Verburg

@maple_shift-它针对初学者:-)
Martijn Verburg

2

D编程语言为并行编程提供了两种范例,两者都有其用途,并且非常有趣。

std.concurrency提供消息传递而没有默认的内存共享。默认情况下,D中的所有全局变量和静态变量都是线程局部的,spawn并且send不允许发送包含可变指针间接寻址的消息。可以通过shared关键字获得有限的共享,这需要类型系统进行额外的检查。在该语言的安全方言之外,您可以使用__gshared关键字强制使用经典的C / Java风格的全局/共享变量,但就种族安全而言,所有赌注都没有涉及。在Andrei Alexandresu的书“ The D Programming Language”的一个免费章节中详细介绍了该模型

std.parallelism安全性较差,但在某种程度上比std.concurrency更具灵活性,并且特别针对多核数据和任务并行性,以提高数据处理吞吐量,而不是一般情况下的并发。它具有并行的foreach循环,异步函数调用,并行约简等功能。它提供了使编写种族安全代码更容易的机制,但是这样做仍然需要一定的纪律。

我最近关于该主题的文章中,可以找到有关D中两个主要的多线程范例的更详尽的讨论


2

我强烈建议您去看看Clojure

并发方法非常新颖,在我看来,您在Java和大多数其他语言中所看到的已取得了重大进步。一些要点:

  • 身份和状态是分开的 -OOP以可变成员变量的形式使用其当前状态来控制对象身份。Clojure严格分离身份(托管引用)和状态(不可变数据结构),其方式大大简化了可靠并发程序的开发。
  • 持久不变的数据结构 -因为一切都是不变的,所以您可以随时拍摄数据/状态的快照,并确保它不会在您的下方被改变。但更好的是-它们是与以前版本共享数据的持久数据结构。结果,操作更接近O(1),而不是为不可变数据写时复制策略要支付的O(n)。
  • 软件事务性内存 -无需使用锁,只需将代码包含在(dosync ...)块中,它们将作为事务自动运行。没有死锁的风险,也不需要开发复杂的锁定策略。这是一个巨大的胜利,尤其是与上面的不可变数据结构结合使用时。实际上,Clojure 在其STM中实现了多版本并发控制
  • 函数式编程范式用于简化编写可靠的并发代码的过程。基本上,如果您采用一个不可变的数据结构,通过一个纯函数运行它并输出另一个不可变的数据结构,那么可以确保您的代码安全并发。

我建议观看此视频作为介绍


1

看一下Scala语言,它扩展了Java并在JVM上运行。它从Erlang借鉴了“ Actor”的概念,并提供了处理并发失败的良好能力。


1

如果您想将它提升到一个全新的水平,则可能需要考虑使用CUDA进行编程。

这使您可以将算法分布在图形卡上的数百个处理核心上,而不是少数几个主要的CPU核心上。甚至还有语言绑定,显然使使用GPGPU技术加速高级语言(例如python)相对容易。


@Chiron-老实说,我很惊讶没有其他人提到过它。
Mark Booth,

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.