C# · 12月 26, 2021

c# – 在.NET中有一个线程调度程序用于长时间运行的线程?

我们的场景是网络扫描器.

它连接到一组主机并且使用低优先级的后台线程并行扫描它们一段时间.

我想能够安排大量的工作,但只有任何给定的说10或任何数量的主机并行扫描.即使我创建了自己的线程,许多回调和其他异步优化使用ThreadPool,并且我的资源用尽.我应该看看MonoTorrent …

如果我使用ThreadPool,我可以将我的应用程序限制为一些数字,足够让剩下的应用程序顺利运行吗?

有没有一个线程池,我可以初始化为n长寿命的线程?

[编辑]
没有人似乎注意到我对一些回应做了一些评论,所以我会在这里添加一些事情.

线程应该是可以取消的
优雅有力地
线程应该具有低优先级,使GUI响应.
>线程长时间运行,但是顺序(分钟)而不是顺序(天).

给定目标主机的工作基本是:

For each test Probe target (work is done mostly on the target end of an SSH connection) Compare probe result to expected result (work is done on engine machine) Prepare results for host

有人可以解释为什么使用SmartThreadPool标记有用的负面效用?

解决方法 在.NET 4中,您有集成的 Task Parallel Library.当您创建一个新的任务(新线程抽象)时,您可以指定一个要长时间运行的任务.我们已经取得了很好的经验(长时间而不是几分钟或几个小时).

您可以在.NET 2中使用它,但实际上它是一个扩展,请检查here.

在VS2010中,基于任务(而不是线程)的调试并行应用程序已得到根本改善.建议尽可能使用任务,而不是使用原始线程.因为它可以让您以更加面向对象的友好方式处理并行性.

UPDATE未指定为长时间运行的任务将排队到线程池(或任何其他调度程序)中.但是如果一个任务被指定为长时间运行,它只创建一个独立的线程,不涉及线程池.