您将如何练习并发和多线程?[关闭]


33

我一直在阅读有关并发,多线程以及“免费午餐已经结束”的信息。但是我还没有在工作中使用MT的可能性。

因此,我正在寻找有关如何通过练习或参加一些开源项目来获得CPU重度MT练习的建议。

谢谢。

编辑:我对使用MT来执行CPU约束任务的开源项目更感兴趣,或者对使用MT来实现有趣的算法感兴趣,而不是只描述线程,互斥锁和锁之类的工具的书籍或论文,或者MT如何用于具有响应式GUI ...



5
问:您将如何练习并发和多线程?答:玩杂耍
史蒂文·洛

@Steven:真的不是那么遥远。
罗伯特·哈维

“免费午餐结束”链接已死
用户

现在应该可以...
Xavier Nodet

Answers:


15

Joseph Albahari关于C#线程的文章是我所见过的最好的资源之一。

目录如下。请注意,某些主题(如任务并行库)特定于.NET,但其中许多主题适用于其他语言,尤其是Java。

GETTING STARTED
Introduction and Concepts
Join and Sleep
How Threading Works
Threads vs Processes
Threading’s Uses and Misuses
Creating and Starting Threads
Passing Data to a Thread
Naming Threads
Foreground vs Background
Thread Priority
Exception Handling
Thread Pooling
Thread Pooling via TPL
Thread Pooling Without TPL
Optimizing the Thread Pool
BASIC SYNCHRONIZATION
+ Synchronization Essentials
+ Locking
+ Thread Safety
+ Event Wait Handles
+ Synchronization Contexts
USING THREADS
+ Event-Based Asynch Pattern
+ BackgroundWorker
+ Interrupt and Abort
+ Safe Cancellation
+ Lazy Initialization
+ Thread-Local Storage
+ Timers
ADVANCED THREADING
+ Nonblocking Synchronization
+ Signaling with Wait and Pulse
+ The Barrier Class
+ Reader/Writer Locks
+ Suspend and Resume
+ Aborting Threads
PARALLEL PROGRAMMING
+ Parallel Programming
+ Why PFX?
+ PLINQ
+ The Parallel Class
+ Task Parallelism
+ Working with AggregateException
+ Concurrent Collections
+ SpinLock and SpinWait

您也可以在这里查看Jon Skeet的教程:http : //www.yoda.arachsys.com/csharp/threads/


3
我将乔恩·斯基特(Jon Skeet)的c#mutlithreading页面添加到您的答案中:yoda.arachsys.com/csharp/threads

1
其次,喜欢阿尔巴哈里(Albarhari)的5章非常有帮助。作为练习,这是一个简单的练习-使用WCF(如果您知道)创建一个多人井字游戏和一个简单的UI-尝试使用每个玩家的响应来更新UI控件。您检查过Firefox代码吗?
Narayana

您介意进一步解释它的功能吗,为什么在回答所提问题时推荐它?“链接,只回答”不太欢迎堆栈交易所
蚊蚋

1
@gnat:我将目录粘贴到了答案中。
罗伯特·哈维

乔恩·斯基特(Jon Skeet)的教程的链接似乎无效(我正在获取Azure 404页面)-这是它的存档:web.archive.org/web/20181010053742/http
ArtOfWarfare

13

Java Concurrency in Practice是有关多线程和并发性的最佳书籍之一。尽管本书中的所有示例均基于Java,但本书对MT世界进行了详尽的说明。当我开发MT系统时,它对我有很大帮助。


3
+1本好书。这是实践中的Java并发,而不是操作。
talonx 2010年

8

James Reinders 撰写的《Intel Threading Building Blocks》一书的第11章专门介绍了使用并行计算(或并行编程)的算法和项目示例:子字符串查找器,生命游戏,Eratosthenes筛网,Matrix Multiply和然后是其他更高级的主题,例如网络数据包过滤和游戏。


4

我发现Joe Duffy 在Windows上进行并行编程非常有帮助。有很多深度。它不会产生任何作用,因此您真的可以很好地了解自己用脚射击的方式。这有助于我保持谨慎,这是我可以给任何从MT应用程序开始的人的最佳建议。


2

并发和并行之间是有区别的。并发是一次同时执行多项操作的行为,例如写入2个文件。并行是通过使用多个内核来加速程序的行为。

尽管在并发方面没有免费的午餐,但是并行而言,午餐无疑变得更加免费,请参见http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell


2
您的区分是不正确的。并发是在重叠的时间段内完成多个任务的行为,而在任何给定时间不一定要做一件事。并行性是在任何给定时间做一件事情以上的行为。
Asad Saeeduddin 2014年

如果它们重叠,则您一次只能做一件事情。
dan_waterworth 2014年

如果它们的开始时间和结束时间重叠,则并不表示这两个任务在任何给定时间都同时进行。给定两个要求和的整数列表,您可以让两个人同时并行和并行地对每个列表进行求和,也可以坐下来在一个列表中的项与另一个列表中的项之间求和列表,它是并发的但不是并行的。
Asad Saeeduddin 2014年

我没有说他们正在同时发生。我说过一次不只做一件事。
dan_waterworth 2014年

一次执行多项操作与同时执行两项操作相同。如果在给定的时间发生了多件事,则它们同时发生。
2014年

1

该站点通常有一些很好的项目示例。www.planet-source-code.com

只需选择一种语言并搜索多线程即可。您应该看到许多带有源代码的项目。


我很惊讶这还没有被投票通过。这是我看到的唯一针对“如何实践并行和并发编程”问题的答案。其他所有答案都回答了“如何学习概念”问题,这是一个不同的问题。
约西亚
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.