2016-04-27 11 views
-1

Code:VB.NET - Führt dieser Code den ThreadPool korrekt aus?

'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 

Der obige Code verwendet Takes Jeder Proxy von einem List() und einfach eine WebRequest des Proxy zu überprüfen, aber das ist nicht im Zusammenhang, was ich frage, eine For Each die Art, wie ich verwendet habe, Führt es aus, wie ich denke, oder habe ich etwas falsch gemacht?

Welche der folgenden passiert ?:

1 - Ist ein Proxy mit 150 Prozesse überprüft werden?

-oder

2 - prüft es 1 Proxy pro Prozess mit 150 Verarbeitung zur gleichen Zeit überprüft?

Wenn es # 1 dann tun, wie kann ich löse es # 2 zu tun?

+0

Es gibt eine einfache Möglichkeit, Ihre eigene Frage zu beantworten. Etwas anderes tun, als einen Proxy zu prüfen, z. schreibe eine Zahl in die Konsole und sieh nach, ob du die gleiche Nummer 150 Mal oder 150 verschiedene Zahlen bekommst. Haben Sie auch die Dokumentation für die von Ihnen aufgerufenen 'Set'-Methoden gelesen? – jmcilhinney

+0

@jmcilhinney Gute Idee über die Konsole, aber keine Idee, was Sie mit "Set" -Methoden meinen. – ShinyMK

+0

@jmcilhinney Ok, Getestet und es tut # 2, Aber wie, etwas verwirrt, ist es tatsächlich zur gleichen Zeit ausgeführt oder nachdem man fertig ist? – ShinyMK

Antwort

1

Die Aufgaben, die Ihren Threads zugewiesen sind, werden im selben Zeitraum ausgeführt. Ich sage es so, denn die einzige Möglichkeit, zwei Aufgaben gleichzeitig exakt zu bearbeiten, ist die Verwendung mehrerer Prozessorkerne. Offensichtlich haben Sie keine 150 Prozessorkerne, so dass 150 Aufgaben nicht gleichzeitig bearbeitet werden können. Sie werden jedoch verschachtelt, weil Prozessoren so schnell arbeiten, dass es für das bloße Auge erscheint, dass sie gleichzeitig verarbeitet werden.

Der Grund, warum ich vorgeschlagen habe, dass Sie die relevante Dokumentation lesen, ist, dass das Durcheinander mit den Thread-Zählungen die Leistung tatsächlich beeinträchtigen kann. Wenn so viele Threads aktiv sind, können Sie Dinge aufgrund der Kontextumschaltung verlangsamen. Im Allgemeinen ist es am besten, wenn Sie alles in die Warteschlange stellen und das System den Rest erledigen, wie es in der Dokumentation steht.

+0

Danke! Also ist meine Schleife so eingestellt, dass sie alle Proxies so schnell wie möglich ausführt und überprüft. Und ja, ich weiß, dass die Anzahl der Verarbeitungs-Threads die Leistung negativ beeinflussen kann, weshalb ich den Wert der Zählung an einen UpDownNumericalValue oder wie auch immer dieser aufgerufen hat. Wenn der Benutzer also die Threads als zu viel erkennt, können sie ihn sogar senken oder sogar erhöhen. Vielen Dank – ShinyMK

Verwandte Themen