• 推荐
  • 评论
  • 收藏

一步一步学习C#多线程知识

2022-11-24    4379次浏览

写在前面:

学习一种技术,我都要先搞清楚,1、我为什么要学习和使用它,它有哪些好处?2、它适用什么场合?3、如何使用它。这是我从我大学的导师那里学来的(在这里向我的导师致敬~~),我觉得很受用。之所以把如何使用放在最后,是因为在你没有搞清楚它的利弊和适用场合之前,如果上来就学习,即使学会了,在使用的过程中带来隐患。所以我会按照这个顺序来写,如果大家认为有道理的话,可以借鉴借鉴~~呵呵

1、为什么要使用ThreadPool?

MSDN的官方说法是:

许多应用程序创建的线程都要在休眠状态中消耗大量时间,以等待事件发生。其他线程可能进入休眠状态,只被定期唤醒以轮询更改或更新状态信息。线程池通过为应用程序提供一个由系统管理的辅助线程池使您可以更为有效地使用线程。一个线程监视排到线程池的若干个等待操作的状态。当一个等待操作完成时,线程池中的一个辅助线程就会执行对应的回调函数。

在来说说我的想法:

1、性能问题。大家在自己的程序生涯中肯定会遇到各种各样的池(有木有啊~~O(∩_∩)O),什么数据库连接池、常量池。之所以有这些池是因为线程和数据库连接的创建和关闭是一种比较昂贵的行为。对于这种昂贵的行为我们往往会考虑在一个池容器中放置一些资源,在用的时候去拿,在不够的时候添点,在用完就归还,这样就可以避免不断的创建资源和销毁资源。

ThreadPool也一样,它能缩短创建线程的时间,如果线程池中有空闲的,可以拿来直接就用。

2、线程管理问题。多线程并发编程本来就很复杂,如果有很多工作线程,你必须自己编码来管理它们,不太好控制。说不上哪就出点问题,咱自己写的小范例自然无所谓。但要真在大型的应用中出点不易察觉的小问题,到时候搞不好你又得熬一个通宵,来体现你的敬业精神。ThreadPool就这点好,它会替你管理所有的线程,而且线程池会根据当前系统特性对池内的线程实行优化处理

原文地址:https://www.cnblogs.com/Leo_wl/p/2033214.html