我一直在阅读有关并发,多线程以及“免费午餐已经结束”的信息。但是我还没有在工作中使用MT的可能性。
因此,我正在寻找有关如何通过练习或参加一些开源项目来获得CPU重度MT练习的建议。
谢谢。
编辑:我对使用MT来执行CPU约束任务的开源项目更感兴趣,或者对使用MT来实现有趣的算法感兴趣,而不是只描述线程,互斥锁和锁之类的工具的书籍或论文,或者MT如何用于具有响应式GUI ...
我一直在阅读有关并发,多线程以及“免费午餐已经结束”的信息。但是我还没有在工作中使用MT的可能性。
因此,我正在寻找有关如何通过练习或参加一些开源项目来获得CPU重度MT练习的建议。
谢谢。
编辑:我对使用MT来执行CPU约束任务的开源项目更感兴趣,或者对使用MT来实现有趣的算法感兴趣,而不是只描述线程,互斥锁和锁之类的工具的书籍或论文,或者MT如何用于具有响应式GUI ...
Answers:
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/
Java Concurrency in Practice是有关多线程和并发性的最佳书籍之一。尽管本书中的所有示例均基于Java,但本书对MT世界进行了详尽的说明。当我开发MT系统时,它对我有很大帮助。
James Reinders 撰写的《Intel Threading Building Blocks》一书的第11章专门介绍了使用并行计算(或并行编程)的算法和项目示例:子字符串查找器,生命游戏,Eratosthenes筛网,Matrix Multiply和然后是其他更高级的主题,例如网络数据包过滤和游戏。
并发和并行之间是有区别的。并发是一次同时执行多项操作的行为,例如写入2个文件。并行是通过使用多个内核来加速程序的行为。
尽管在并发方面没有免费的午餐,但是并行而言,午餐无疑变得更加免费,请参见http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell
该站点通常有一些很好的项目示例。www.planet-source-code.com
只需选择一种语言并搜索多线程即可。您应该看到许多带有源代码的项目。