学习并发和多线程应用程序的最佳资源是什么?[关闭]


16

我意识到我在多线程应用程序和并发编程方面存在巨大的知识鸿沟。过去,我已经介绍了一些基础知识,但是大部分内容似乎都已遗忘,这绝对是我想要且需要了解的领域。

学习构建并发应用程序的最佳资源是什么?我是一个非常务实的人,因此,如果所说的书包含一些具体的例子会更好,但是我愿意提出建议。我个人更喜欢使用伪代码或C ++,并且最好还是偏向游戏开发,但不是必需的。


您更喜欢“以伪代码工作”?希望对您有用!:)
logc

Answers:


6

这些是我最近发现有用的书:

实践中的Java并发 -许多Java并发工具的作者。Java特有的,但是关于线程的危险和陷阱的信息非常清楚和有用。

并发的艺术 -并不是标题所暗示的令人眼花theoretical乱的理论论文,实际上是相当有用和忠实的实用建议和示例的简明汇编。

JVM上的编程并发性 -这实际上一本引人入胜的理论论文,但是非常非常易读和有见地。如果您需要了解STM或参与者是什么,他们的优缺点是什么以及为什么,本书将告诉您。

有许多专用的实用程序库,例如英特尔线程构建模块或Apple的Grand Central Station-它们通常都有自己的专用手册,这些手册通常都很好,并且如果您想对它们做一些大事,无论如何都是必读的。


4

我发现Joe Albahari提供的这个免费线程资源非常出色...

C#中的线程

它倾向于C#,但是这些概念完全适用于其他语言。他还提供了英语和其他几种语言的PDF格式的教程。由于示例代码,代码的逐步说明以及示例附带的出色序列图和状态图的结合,我会推荐它。

本教程分为五个部分:

它可以以本书的形式在此处获得:简而言之的C#4.0(第23和24章)


1
+1,这是我通常对.NET中的线程/并发/并行性的“参考”
Matthew King


1

现在,C ++标准中提供了线程工具。因此,如果您想学习C ++,我建议您在阅读常规线程教程之前先阅读一下有关新语言功能的简单回顾。然后返回并稍后更详细地查看标准。

在实践中,线程化是大多数人认为但不理解的事情之一。我参加了一个静态分析研究人员的演讲,该研究人员在IBM研究数据库(Java),Linux文件系统(C)和其他一些引人注目的项目中确定了竞争条件。其中一些项目是由并发和线程方面的著名专家编写的。请注意,编写线程安全的代码很困难,并且知识鸿沟并不是唯一认识到它的人的。

尽管它不能直接帮助您进行游戏编程,但我还是建议您看一些MPI教程(对不起,没有具体建议)。用线程编写正确的并发代码似乎很困难,但通过消息传递似乎很容易。间接地,希望是探索不同的并发模型将有助于您自己的思维过程,从而将代码结构化为线程安全的。


1

要了解并发,请使用专为并发设计的语言。Golang是一个不错的选择,因为它内置了对并发的支持以及类似于C的语法,这使得大多数程序员都易于学习该语言。

它具有消息传递,互斥锁等功能,可以满足您几乎所有的并发需求,并且在其他语言中具有更复杂的等效项。

例如,a使用C中的MPI 从另一个线程将int接收到变量中:

MPI_Recv(&a, 1, MPI_INT, 0, 0, MPI_COMM_WORLD,MPI_STATUS_IGNORE);

在go中从另一个(用户)线程接收一个int到变量a中:

a := <-c

要在实践中学习go语言,请查看go tour,您可以在其中浏览器中编写,编译和运行go代码。

tour.golang.org

跳至并发部分

http://tour.golang.org/concurrency/1

我的前教授为CS一年级学生开设了一个非常受欢迎的短期课程,主题是并发。为了快速而全面地了解并发,我绝对建议阅读此内容。

并发编程基础

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.