In einem meiner Projekte, das irgendwie ein Aggregator ist, analysiere ich Feeds, Podcasts und so weiter aus dem Internet.
Wenn ich bei einer großen Anzahl von Ressourcen einen sequentiellen Ansatz verwende, dauert es ziemlich lange, alle zu verarbeiten (aufgrund von Netzwerkproblemen und ähnlichen Problemen).
foreach(feed in feeds)
{
read_from_web(feed)
parse(feed)
}
Daher möchte ich Parallelität implementieren und konnte mich nicht entscheiden, ob ich ThreadPools grundsätzlich für die Verarbeitung mit Arbeitsthreads verwenden oder mich einfach auf TPL verlassen soll, um sie zu sortieren.
ThreadPools erledigt den Job mit Sicherheit mit Worker-Threads und ich bekomme das, was ich erwarte (und in Multi-Core-CPU-Umgebungen werden auch die anderen Kerne verwendet).
Aber ich möchte immer noch auch TPL als empfohlene Methode in Betracht ziehen, aber ich bin ein bisschen besorgt darüber. Zunächst weiß ich, dass TPL ThreadPools verwendet, aber zusätzliche Entscheidungsebenen hinzufügt. Ich bin hauptsächlich besorgt über den Zustand, in dem eine Single-Core-Umgebung vorhanden ist. Wenn ich mich nicht irre, beginnt TPL mit einer Anzahl von Worker-Threads, die der Anzahl der verfügbaren CPU-Kerne am Anfang entspricht. Ich befürchte, dass TPL für meinen IO-gebundenen Fall ähnliche Ergebnisse wie der sequentielle Ansatz liefert.
Ist es für IO-gebundene Vorgänge (in meinem Fall das Lesen von Ressourcen aus dem Web) am besten, ThreadPools zu verwenden und die Dinge zu steuern, oder sich besser nur auf TPL zu verlassen? Kann TPL auch in IO-gebundenen Szenarien verwendet werden?
Update : Mein Hauptanliegen ist, dass sich TPL in einer Single-Core-CPU- Umgebung nur wie ein sequentieller Ansatz verhält oder weiterhin Parallelität bietet. Ich lese bereits Parallel Programming mit Microsoft .NET und damit das Buch , konnte aber keine genaue Antwort darauf finden.
Hinweis: Dies ist eine Umformulierung meiner vorherigen Frage [ Ist es möglich, Thread-Parallelität und Parallelität zusammen zu verwenden? ] was ziemlich falsch formuliert war.