Bestes Threading-Queue-Beispiel / Best Practice
Habe ich Daten, die ausgeführt werden muss, auf eine bestimmte hintergrund-thread. Ich habe code aus allen anderen threads, die aufrufen zu müssen. hat jemand ein gutes tutorial oder best-practice auf eine Warteschlange für die Synchronisation zur Unterstützung dieses threading-Anforderung
Kommentar zu dem Problem
InformationsquelleAutor der Frage leora | 2008-12-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie entweder:
InformationsquelleAutor der Antwort VonC
Check-out Threading in C#, von Joseph Albahari, sehr komplette Referenz über multithreading. Insbesondere deckt er producer/consumer-queues.
InformationsquelleAutor der Antwort Mauricio Scheffer
Dies ist ein interessanter Artikel auf ThreadPools:
Für einfachere Anwendungsfälle könnten Sie auch verwenden .Net eigenen ThreadPool-Klasse.
InformationsquelleAutor der Antwort Dirk Vollmar
Einer meiner Lieblings-Lösungen für dieses problem ist ähnlich der
producer/consumer
Muster.Erstelle ich ein master-thread (so ziemlich mein Programm
Main()
) hält, die eine blockierende queue-Objekt.Dieser master-thread durch Ausgliederung mehrerer worker-threads, die einfach pop-off Dinge, die zentral-blockierende Threads und verarbeiten. Da es ein threadsicher Warteschlange blockiert, der Synchronisations-bits sind einfach--die
TaskQueue.Dequeue()
Aufruf blockiert, bis eine Aufgabe in die Warteschlange eingereiht, die von den Produzent/Haupt-thread.Können Sie dynamisch zu verwalten, die Anzahl der Arbeitnehmer, die Sie wollen, oder beheben Sie nach eine Konfigurations-variable-denn Sie alle sind nur Dinge, die knallen aus der Warteschlange, der Anzahl der Arbeitnehmer nicht hinzufügen beliebiger Komplexität.
In meinem Fall habe ich eine Dienstleistung, die Prozesse, die verschiedene Arten von
tasks
. Ich habe die Warteschlange eingegeben, um mit etwas generisches wieTaskQueueTask
. Dann habe ich eine Unterklasse und überschreiben dieExecute()
Methode.Ich habe auch versucht die .NET-threadpool-Ansatz, wo in können Sie werfen Sachen in den pool sehr leicht ist. Es war extrem einfach zu bedienen, aber auch wenig Kontrolle und keine Garantie der Reihenfolge der Ausführung, timing, etc. Es wird empfohlen, nur für leichte Aufgaben.
InformationsquelleAutor der Antwort Michael Haren
Können Sie versuchen, diese Lösung. Es zeigt Ihnen, wie die Umsetzung der producer-consumer-pattern. Hat auch eine Erklärung, was mit ihm getan werden kann. Wie verschiedene Kombinationen der Anzahl der Produzenten und Konsumenten.
http://devpinoy.org/blogs/jakelite/archive/2009/01/12/threading-patterns-the-producer-consumer-pattern.aspx
http://devpinoy.org/blogs/jakelite/archive/2009/02/03/threading-patterns-producer-consumer-pattern-examples.aspx
InformationsquelleAutor der Antwort jake.stateresa