随着桌面多核 CPU 的兴起,多线程技能将成为程序员的宝贵财富。你能为想要学习线程编程的程序员推荐一些好的资源(书籍、教程、网站等)吗?
17 回答
查看 Herb Sutter 的“免费午餐结束”以及他关于有效并发的系列文章。
Joseph Albahari 在这里写了一篇很好的 C# 线程概述:
老实说,我自己从来没有读过它,但是我听说过很多人推荐的Java 并发编程一本书。
我在我的博客上写了关于 C++ 中的多线程和并发的文章。我还在写一本关于 C++ 并发的书:C++ Concurrency in Action。
我已经阅读了 Brian Goetz 的(大部分)Java Concurrency in Practice,非常好。
很明显,本书贯穿了一个基于 Java 的主题(使用 Java 特定的线程、锁等实现),但几乎所有的原则都可以应用于其他语言。
作者的主页包含他撰写的文章列表,其中一些包含与线程相关的内容。也许从那里开始,如果你喜欢他的风格,买这本书。
对于 C#(或一般的 .NET)并发编程的优秀指南和参考,我推荐 MSDN What Every Dev Must Know About Multithreaded Apps文章,作者是 MSDN 上的 Vance Morrison。它包含大量关于多线程开发的最佳实践信息和注意事项
我为并发文章、博客和项目维护了一个链接博客:
我通常每天发布一个或两个关于各种环境(Erlang、Java、Scala、.NET、C++、Ruby、Python 等)中各种主题(线程、参与者、锁定、并行编程)的链接。
它是 Delphi 特有的,但没有理由将这个概念不适用于任何其他语言!
http://www.cilk.com/multicore-e-book/
这是对情况的一个很好的总体概述,如果您正在寻找教程和书籍,最好指定一种语言作为起点,这样您就可以弄乱一些代码。
Erlang 编程语言提供了一种易于使用的并发编程风格。你可能永远不会真正使用 Erlang,但这些概念可以移植到其他语言。您可能想阅读Programming Erlang: Software for a Concurrent World 一书。
函数式编程的粉丝声称没有必要学习任何新东西。只需使用纯函数式语言,编译器或解释器就会自动并行化所有内容。因此,您可能想学习 Haskell、OCaml 或其他函数式语言。
我不知道您到底在寻找什么,但是如果您正在做 WindowsForms 开发,那么下面的博客文章值得每一分钟阅读: WinForms UI 线程调用:In-Depth Review of Invoke/BeginInvoke/InvokeRequred
我认为 Boost.Threads 是一个很棒的 C++ 并发库,特别是如果你只是想开始编写多线程应用程序。代码非常简洁易懂,而且下一个 C++ 标准可能会包含一个基于 Boost.Threads 的线程库(教程:http ://www.ddj.com/cpp/184401518 )
如果您想尝试做一个简单任务的高度并行版本,或者查看真正的解决方案,您可能会比查看Wide Finder项目做得更糟。基本上它是关于如何有效地对日志文件进行并行正则表达式匹配,但尝试添加尽可能少的代码。
参与者以多种不同的语言提交了解决方案,并发布了性能结果。最初的项目现在已经完成,现在宽取景器 2开始工作。
CodingHorror对宽查找器有一个很好的介绍。
为了对该主题进行丰富、透彻的处理,并在计算机科学与实践之间取得良好的平衡,我推荐《多处理器编程的艺术》。很多例子都是在面向对象的代码中,比如Java,其他语言也分散在各处。这仅取决于所涵盖的主题。我真正喜欢这本书的地方在于它讨论了如何在并发设计中实现通用算法。当然,还有很多!
对于一般概念和 pthread 的处理,我真的很喜欢Programming with POSIX Threads。作为它的库和 API,它在 C 中。
对于 Windows 和 C# 开发人员,请查看Joe Duffy 的博客。Joe 在 Microsoft 开发部门从事并行库、基础架构和编程模型的工作。他将于 2008 年 11 月出版一本名为Concurrent Programming on Windows(亚马逊链接)的书。
此外,不要错过教父的博客:Herb Sutter's Sutter's Mill。他在 Dobb 博士的期刊等中提供了指向他所有文章的链接。单击他的并发类别。
CPU制造商网站有一些有趣的内容:
http://developer.amd.com/documentation/articles/Pages/default.aspx#parallel
http://software.intel.com/en-us/multi-core
英特尔的开源线程库也有一些很好的参考:
如果您使用 C#,Gaston C. Hillar 的“C# 2008 和 2005 线程编程”一书 - Packt Publishing - http://www.packtpub.com/beginners-guide-for-C-sharp-2008-and- 2005-threaded-programming/book,会帮助你。强烈推荐给 C# 程序员,因为您可以下载带有利用多核计算机的有趣示例的代码。这本书是一本很好的指南,有很多代码可以练习。它讲述了故事,同时解释了最困难的概念。