代码:
'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个代理?
-或者-
2-是否每个进程检查1个代理,同时检查150个进程?
如果它正在做#1,那我怎么解决它才能做#2?
分配给线程的任务将在同一时间范围内执行。我之所以这样说,是因为实际上可以完全同时处理两个任务的唯一方法是使用多个处理器内核。显然,您没有150个处理器核心,因此无法同时处理150个任务。但是,它们将如此交错,因为处理器工作得如此之快,所以肉眼看起来它们是同时进行处理的。
我建议您阅读相关文档的原因是,弄乱线程数实际上会损害性能。激活了这么多线程,由于所有上下文切换,您可能会导致事情变慢。如文档所述,通常最好只是将所有内容排入队列,让系统处理其余部分。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句