关于语言不可知:如何学习多线程并行编程?

How can one learn multi-threaded parallel programming?

No matter how proficient you are at programming C or Java, you should consider adding multi-threaded programming to your set of skills.

This is NOT something you should try to learn on your own. It is MUCH harder to learn than sequential programming. If you are a Technical Manager, you SHOULD invest in retraining your key staff in multi-threaded programming. You might also monitor the research activities in concurrent programming languages (like those listed above). You can be sure that your competitors will.

这是本文的引言。我想我们中的大多数人都非常擅长教自己不同的语言、数据结构、算法等,我确实认识到了正确进行并行编程需要发生的心理变化。

我反对这样的观点,即一个人不能"正确"地学习并行编程。那么,自学并行编程最负责任的方法是什么呢?推荐哪些书籍和其他资源?

编辑:这里有更多的细节。我将主要应用于科学计算,但我正在寻找通用的、语言无关的材料/建议。我也在寻找一个健康剂量的实践理论。想象一下,你有一个优秀的开发人员,他热爱数学和计算机科学,但从未上过并行编程课程。现在假设他有一个问题的最后期限(比如说1年),你必须给他一些材料来弄清楚并行化是否有帮助,以及如何正确地实现它。你会给他什么资源?这就是我(我希望其他开发人员)对学习并行化/多线程的兴趣所在。


如果你到我的工作场所来问这个问题,我会向你扔几本书:

并行计算与并行科学计算导论

你的回答很可能是"那不是我想了解的!"所以回来,在你的问题上更具体一点,我们将能够在我们的答案中更具体一点。

但是最"负责任"的自学方法和最负责任的自学方法是一样的:找个问题,找个工具包,找个截止日期,然后破解。


如果你阅读谷歌为以下内容找到的一切,你会有一个很好的开始。假设一般的IT背景等,这些不是语言或操作系统特定的:

彼得森算法原子试验和装置关键部分交会记忆障碍无锁算法

其数学背景可能是Petri网。

读Dijkstra。


那篇文章基本上是培训服务的广告。你应该对销售人员对自己产品价值的看法有一定的谨慎。

我不知道你是如何学到你已经知道的关于计算机的所有东西的,但是如果这对你有用的话,我会坚持用同样的方法来做下一件你想学的事情。

我不能推荐任何语言/平台不可知论的书籍——我怀疑它们无论如何都会非常学术化。如果你真的在.NET上,那么Jeff Richter写了很多关于线程的好东西,我相信他的C/clr书的第三版(早期版本非常好)有很多关于并行编程的内容。


对于微软技术,这里的msdn并行计算门户提供了大量的信息。你可以从"入门"链接开始。