首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么时候在C#中使用线程池?

什么时候在C#中使用线程池?
EN

Stack Overflow用户
提问于 2008-09-28 06:00:11
回答 14查看 69K关注 0票数 127

我一直在努力学习C#中的多线程编程,我很困惑什么时候使用线程池最好,而不是创建我自己的线程。有一本书建议只对小任务使用线程池(不管这意味着什么),但我似乎找不到任何真正的指导原则。

与创建自己的线程相比,线程池有什么优点和缺点?每种情况下都有哪些示例用例?

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2008-09-28 06:09:17

如果您有许多需要持续处理的逻辑任务,并且希望以并行方式完成这些任务,请使用pool+scheduler。

如果您需要并发执行与IO相关的任务,例如从远程服务器下载内容或访问磁盘,但需要这样做,例如每隔几分钟执行一次,那么可以创建自己的线程,并在完成后杀死它们。

编辑:关于一些考虑因素,我将线程池用于数据库访问、物理/模拟、AI(游戏),以及在处理大量用户定义任务的虚拟机上运行的脚本任务。

通常一个池由每个处理器2个线程组成(所以现在可能是4个),但是如果你知道你需要多少线程,你可以设置你想要的线程数量。

编辑:创建自己的线程的原因是因为上下文发生了变化(即线程需要在进程内和进程外交换,以及它们的内存)。有了无用的上下文更改,比如当你不使用你的线程时,就像一个人可能会说的那样,让它们坐着不动,可以很容易地让你的程序的性能减半(比如你有3个休眠线程和2个活动线程)。因此,如果这些下载线程只是在等待,那么它们将消耗大量的CPU并为您的实际应用程序冷却缓存

票数 48
EN

Stack Overflow用户

发布于 2008-09-28 06:13:46

我建议您在C#中使用线程池,原因与其他语言相同。

当您想要限制正在运行的线程的数量,或者不想要创建和销毁它们的开销时,可以使用线程池。

对于小任务,你读的书是指生命周期很短的任务。如果创建一个只运行一秒的线程需要10秒,那么您应该使用池(忽略我的实际数字,它才是最重要的)。

否则,您会将大部分时间花在创建和销毁线程上,而不是简单地完成它们想要做的工作。

票数 49
EN

Stack Overflow用户

发布于 2008-09-28 06:13:52

下面是对.Net中线程池的一个很好的总结:http://blogs.msdn.com/pedram/archive/2007/08/05/dedicated-thread-or-a-threadpool-thread.aspx

这篇文章也有一些要点,告诉你什么时候不应该使用线程池,而是启动自己的线程。

票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/145304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档