寻找一个很好的练习来帮助我在多线程中变得更好

时间:2010-02-01 15:42:49

标签: c# .net multithreading

我认为自己是一个相当不错的开发人员,但是当谈到多线程时,我总是n00b。我的意思是我在工作中所做的唯一多线程是基本的东西,例如使用ThreadPool生成一些后台工作来产生多个线程。不需要同步,也不需要手动创建线程。

所以,我的问题是这个;我想编写一些需要大量多线程的应用程序,并且需要执行所有高级内容,例如同步等。我只是想不出任何要编写的东西。我想过可能会尝试编写自己的ThreadPool,但我认为我需要学会走路才能跑步。那么有什么想法可以建议吗?它不需要任何现实世界的用途,它可以毫无意义,毫无价值,但我只是想变得更好。我已经阅读了大量关于所有理论的文章和教程,但唯一真正变得更好的方法就是做。那么,有什么想法吗?

3 个答案:

答案 0 :(得分:7)

  1. 递归快速排序。将排序时间作为线程数的函数进行比较。
  2. Craps模拟器。你每分钟可以做多少骰子?
  3. 网页抓取工具。给它一个URL并下载所有子页面和图像。观察相互引用的页面,这样您就不会进入无限循环。请注意,线程将阻止等待网络响应,从而为您提供与纯计算线程不同的CPU利用率。使用队列来跟踪未读页面和字典以跟踪活动线程。超时的线程返回队列。
  4. WCF网络服务器。为每个请求生成一个新线程。编写一个多线程WPF客户端,实时更新用户界面。
  5. 那够了吗?

答案 1 :(得分:3)

某种无意义的批处理应用程序怎么样?在单个线程中生成大量数据并将其转储到文件中,然后开始将工作拆分为不同大小的线程并将它们转储到另一个文件中,计算时间并比较最后的文件以确保顺序是一样的。这将使您进入多线程,锁定,互斥,什么不是,并且还显示多线程某些任务与单线程中的处理相比的好处。

第一件事突然出现在我脑海中。可能是沉闷和/或毫无意义,但不要射击信使! :)

答案 2 :(得分:3)

我认为你应该引起对这本书的关注:

    Jeffrey Richter的
  1. Windows via C/C++。这是关于多线程的最好的书籍之一
  2. Joe Duffy的
  3. Concurrent Programming on Windows。另一本关于多线程的优秀书籍
  4. Herb Sutter的精彩文章(赫伯,我们都在等你的新书!)

    Effective Concurrency系列

    一些博客:

    1. Herb Sutter's blog
    2. Parallel programming with .Net
    3. Jeffrey Richter's Blog
    4. Joe Duffy's blog
    5. P.S。 Power Threading如何作为多线程(和ThreadPool实现)的一个例子?