Log*_*gic 11 .net c# multithreading
我们的场景是网络扫描仪.
它连接到一组主机并使用低优先级后台线程并行扫描它们一段时间.
我希望能够安排大量的工作,但只有任何给定的说十个或同时扫描的任何数量的主机.即使我创建自己的线程,许多回调和其他异步优点使用ThreadPool,我最终耗尽资源.我应该看一下MonoTorrent ......
如果我使用ThreadPool,我是否可以将我的应用程序限制为某个数字,这些数字将足以让应用程序的其余部分顺利运行?
是否有一个线程池,我可以初始化为n长寿线程?
[编辑] 似乎没有人注意到我对一些回复做了一些评论,所以我会在这里添加一些东西.
对于给定目标主机的工作基本上是:
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
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么使用SmartThreadPool标记有消极的用处吗?
CLR ThreadPool不适合执行长时间运行的任务:它用于执行短任务,其中创建线程的成本几乎与执行方法本身一样高.(或至少占执行该方法所花费的时间的很大一部分.)正如您所见,.NET本身消耗线程池线程,您不能为自己预留一块它们,以免冒着运行时间的风险.
调度,限制和取消工作是另一回事.没有其他内置的.NET工作队列线程池,所以你可以自己动手(自己管理线程或BackgroundWorkers)或找到一个预先存在的线程池(Ami Bar的SmartThreadPool看起来很有前景,虽然我自己没有用过它).
| 归档时间: |
|
| 查看次数: |
7005 次 |
| 最近记录: |