一尘不染

什么时候在C#中使用线程池?[关闭]

c#

我一直在尝试学习C#中的多线程编程,对于何时使用线程池而不是创建自己的线程,我感到困惑。一本书建议仅将线程池用于小任务(无论什么意思),但我似乎找不到任何真正的指导方针。在做出此编程决定时,需要考虑哪些因素?


阅读 595

收藏
2020-05-19

共1个答案

一尘不染

如果您有很多需要不断处理的逻辑任务,并且希望并行执行,请使用pool + scheduler。

如果您需要同时执行与IO相关的任务(例如从远程服务器下载内容或访问磁盘),但是需要每隔几分钟执行一次操作,那么请创建自己的线程并在完成后杀死它们。

编辑:关于一些注意事项,我将线程池用于数据库访问,物理/模拟,AI(游戏),以及用于在处理许多用户定义任务的虚拟机上运行的脚本任务。

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

编辑:制作自己的线程的原因是由于上下文的更改,(即当线程需要与它们的内存一起换入和换出该进程时)。进行无用的上下文更改(例如,当您不使用线程时),就像他们所说的那样,将它们闲置一圈,很容易会使程序性能降低一半(例如,您有3个睡眠线程和2个活动线程)。因此,如果这些下载线程仅在等待,它们将消耗大量的CPU并冷却实际应用程序的缓存

2020-05-19