2010-02-01 66 views
9

我認爲自己是一個相當不錯的開發人員,但是當涉及到多線程時,我總共是n00b。我的意思是我在工作中唯一的多線程是使用ThreadPool產生多個線程來做一些後臺工作的非常基本的東西。沒有必要同步,並且從來沒有任何需要手動創建線程。尋找一個很好的練習,以幫助我在多線程中更好

所以,我的問題是這樣的;我想編寫一些需要大量多線程的應用程序,並且需要完成所有先進的工作,比如同步等。我只是想不出任何可寫的東西。我想過也許試圖編寫自己的ThreadPool,但我認爲我需要學會走路才能跑步。那麼有人可以提出什麼想法?它不必具有任何真實世界的用途,它可以完全毫無意義且毫無價值,但我只想變得更好。我已經閱讀了大量有關所有理論的文章和教程,但真正改善的唯一方法就是通過做。那麼,有什麼想法?

+5

試穿線我的妻子的serger縫紉機。那東西比M $運行更多的線程Office 2000 – 2010-02-01 15:48:45

+0

ba-dum,tishhhh。 – QueueHammer 2010-02-01 16:04:36

回答

7
  1. 遞歸快速排序。將排序時間作爲線程數的函數進行比較。
  2. 胡扯模擬器。你每分鐘可以做多少個骰子?
  3. 網頁爬蟲。給它一個URL並下載所有的子頁面和圖像。注意相互引用的頁面,以免進入無限循環。請注意,這些線程將阻止等待網絡響應,從而爲您提供與純粹基於計算的線程不同的CPU利用率。使用隊列跟蹤未讀頁面和字典以跟蹤活動線程。超時線程返回隊列。
  4. WCF Web服務器。爲每個請求產生一個新線程。編寫一個實時更新用戶界面的多線程WPF客戶端。

那夠了嗎?

+1

寫了一個Web Crawler。偉大的主意!也很有趣。不得不使隊列線程安全,以及跟蹤已經檢查的URL的緩存只是我需要的練習。謝謝!接下來我會給WCF Web服務器一個嘗試。 – BFree 2010-02-07 07:09:30

3

某種無意義的批處理應用程序如何?在單個線程中生成可怕數量的數據並將其轉儲到文件中,然後開始將工作分解爲不同大小的線程並將其轉儲到另一個文件中,對其進行計時並在末尾比較文件以確保順序是一樣的。這會讓你進入多線程,鎖定,互斥鎖以及什麼不是,也可以顯示多線程處理某些任務與單線程處理的好處。

第一件事就是彈出我腦海中。可能無聊和/或毫無意義,但不要拍攝使者! :)

+0

有趣的建議。不知道我完全理解你的意思,雖然「時間他們,並在最後比較文件,以確保訂單是相同的」 – BFree 2010-02-01 16:00:54

+0

對不起 - 我的意思是花在一個單一的線程上的時間,然後時間花在2, 3,4,n等線程 – 2010-02-02 09:27:24

3

我想你應該提醒大家注意這個書:

  1. Windows via C/C++通過傑弗裏裏希特。這是關於多線程的最好的書籍之一
  2. Concurrent Programming on Windows Joe Duffy。有關香草薩特多線程

外觀極好文章的另一本書外觀極好(中草藥,大家都在等待你的新書!)

Effective Concurrency系列

一些博客:

  1. Herb Sutter's blog
  2. Parallel programming with .Net
  3. Jeffrey Richter's Blog
  4. Joe Duffy's blog

附:作爲多線程(和ThreadPool實現)的示例,Power Threading怎麼樣?

+0

+1爲jeffrey ritcher;愛他的書... – 2010-02-01 16:03:52

+0

非常棒的閱讀材料,但我真的很想寫一些代碼。我做了足夠的閱讀... – BFree 2010-02-01 16:46:14

+0

也許嘗試實現多線程套接字服務器?或者一些簡單的多線程計算? – 2010-02-01 17:55:52