我对多线程有一个基本的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. 我只是不理解Qt中的线程
- 2. 我不完全理解JavaScript线程
- 3. 编程中的理论理论?如何
- 4. 在.NET中进行验证最佳实践的异常处理
- 5. 在C#中管理定时线程.net
- 6. 单元测试 - 不能从理论走向实践
- 7. 理论上对数的复杂性,但实际上是线性的
- 8. 在通用处理程序中处理不同ajax调用的最佳实践
- 9. android线程和处理程序最佳实践
- 10. 事件处理程序中的异常管理实践
- 11. 在.NET中,事件处理的线程是什么?
- 12. 在.NET中使用线程本地存储的最佳实践是什么?
- 13. iOS实施理论
- 14. .NET中的前台/后台线程的实践
- 15. 阿卡,线程调度员,代理最佳实践
- 16. 背景消费者线程生存期管理最佳实践
- 17. .NET:在asp.net理解的web.config
- 18. 流程管理理论
- 19. 很想知道线程理论
- 20. 我对C#线程池的理解是否正确?
- 21. 博客来梳理我的数学(在实践中)
- 22. 什么是加密/解密密钥管理最佳实践
- 23. 寻找Plone的HOWTO组合框多选 - 把我从理论到实践
- 24. 麻烦理解Java线程
- 25. 什么是在Web服务中处理ID的最佳实践?
- 26. .NET远程处理线程模型
- 27. 同时执行多个备份任务:理论与实践
- 28. 实践与理论矛盾关于莱霍斯坐标系统
- 29. 线程和代表 - 我不完全理解他们的关系
- 30. 理解下划线的实施isNaN