代码:
'Get the Thread Count - Lets say this value was 150;
Dim threads As Integer = CheckerThreads.Value
'Set the Thread Count;
ThreadPool.SetMinThreads(threads, threads)
ThreadPool.SetMaxThreads(threads, threads)
ServicePointManager.DefaultConnectionLimit = threads
ServicePointManager.Expect100Continue = True
'For Each proxy from the Opened File;
For Each Proxy In proxies
'Check the Proxy;
ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf CheckProxy), Proxy)
Next
上面的代码,从List()
获取每个代理,并简单地使用WebRequest检查代理,但那不相关,我想知道的是使用For Each
的方式我是,它是按照我的想法执行,还是我做错了什么?
发生以下哪种情况?:
1 - 是否使用150个流程检查了1个代理?
-OR -
2 - 是否每个进程检查1个代理,同时进行150次处理检查?
如果它正在执行#1 ,那么如何解决它#2 ?
答案 0 :(得分:1)
分配给您的线程的任务将在同一时间范围内执行。我之所以这么说,是因为两个任务实际上可以完全同时处理的唯一方法是多个处理器内核。显然,您没有150个处理器核心,因此无法同时处理150个任务。它们虽然是交错的,但由于处理器工作速度如此之快,肉眼看来它们是同时处理的。
我建议您阅读相关文档的原因是,弄乱线程数实际上会损害性能。如此多线程处于活动状态,由于所有上下文切换,您可能会导致速度变慢。通常最好只是将所有内容排队,让系统处理剩下的事情,正如文档所说。