我對多線程有一個基本的cs-major理解,但除了應用程序中的簡單定時器之外,從未做過任何事情。有沒有人知道一個好的資源,可以讓我參觀如何使用多線程應用程序,解釋基礎知識,也許會帶來一些更難的東西?我理解線程的理論,但不是在實踐中.net
回答
這是Joseph Albahari提供的免費資源。 Threading in C#
有4種基本方式的.Net同步線程:
- BackgroundWorker的控制
- WaitHandles
- 回調函數
- 輪詢的ASyncResult對象
通常你想從列表頂部開始並逐漸減少。這意味着首先看看後臺工作人員是否適合這種情況。但是,它幾乎假定了Windows窗體,並且只是產生一個新線程。
接下來嘗試waithandles。等待手柄適用於協調多個線程。你可以把它們全部踢出去並等待它們全部結束,或者如果你想保持一定數量的活動,你只需等待一個,並在結束時產生下一個。或者也許你知道一個線程會更快完成,所以你可以等待它完成,做一些工作,然後等待其餘的完成。
等待處理可能看起來有點多,例如,如果你只是產生一個額外的線程,並且你不想阻塞,直到它完成。然後您可以使用回調函數,以便在線程完成後立即調用您指定的函數。
最後,當且僅當由於某種原因,以上都不會起作用,您可以退回到投票。
我能想到的5點不同的方式,以獲得一個新的線程在.NET中,也大致是:創建
- OS,通常作爲的WinForms事件(包括BackgoundWorker)的結果。
- Obj.Begin ___()/ End ____()。某些CLR類已經爲您定義了這些異步方法,顯然您希望在它們可用時使用它們。
- ThreadPool.QueueUserWorkItem()。大部分時間使用這個來創建自己的線程。
- Delegate.BeginInvoke()/ EndInvoke()。你可以用這種方法包裝任何方法。
- Thread.Start()。你可能這樣做,但我最近讀了一些東西(現在沒有鏈接),如果QueueUserWorkItem不會工作的委託方法可能會更好。
兩個偉大的文章:
What Every Dev Must Know About Multithreaded Apps
Understand the Impact of Low-Lock Techniques in Multithreaded Apps
雖然這篇文章是不是你在尋找什麼特別,它有望成爲援助一般(即它是有關,和一個非常良好的閱讀):
The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software
一個良好的網絡資源以瞭解多線程在.NET:
一個我知道關於這個問題的最好的資源就是「C#線程」的書: http://www.albahari.com/threading/
我擁有所有.NET開發人員的一個很好的概述需要了解以編程多線程應用程序。
- 1. 在.net Windows服務中處理死工作線程的最佳實踐?
- 2. 我只是不理解Qt中的線程
- 3. 我不完全理解JavaScript線程
- 4. 編程中的理論理論?如何
- 5. 不理解線程XCode
- 6. 在實踐中理解繼承。打印實例的值
- 7. 在.NET中進行驗證最佳實踐的異常處理
- 8. 在C#中管理定時線程.net
- 9. 單元測試 - 不能從理論走向實踐
- 10. 在通用處理程序中處理不同ajax調用的最佳實踐
- 11. 理解多線程
- 12. 理論上對數的複雜性,但實際上是線性的
- 13. android線程和處理程序最佳實踐
- 14. 事件處理程序中的異常管理實踐
- 15. 在.NET中,事件處理的線程是什麼?
- 16. 實現Rx處理程序的最佳實踐是什麼?
- 17. JMS隊列上多線程消息處理的最佳實踐
- 18. 在.NET中使用線程本地存儲的最佳實踐是什麼?
- 19. 如何在實踐中理解書籍java併發的例子?
- 20. 我不能理解Java中的這個Applet和線程代碼
- 21. .NET中的前臺/後臺線程的實踐
- 22. 線程練習 - 幫我理解
- 23. iOS實施理論
- 24. 事件處理程序不良實踐中的功能代碼?
- 25. .NET:在asp.net理解的web.config
- 26. 阿卡,線程調度員,代理最佳實踐
- 27. 背景消費者線程生存期管理最佳實踐
- 28. 我似乎並不理解評論中的NoMethodError#編輯
- 29. 流程管理理論
- 30. 很想知道線程理論