Suche "FIFO-Semaphore"

15/07/2009 - 15:05 von Martin Plotz | Report spam
Hallo zusammen,
in meiner Anwendung laufen teilweise einige (>100) Threads gleichzeitig
(da es sich um eine Server-Anwendung handelt) und ich habe festgestellt
dass es aus Performancegründen sinnvoll ist, die Anzahl der aktiven
Threads zu begrenzen (auf 4-12 Threads, abhàngig von der Server-Hardware).
Dazu habe ich die .net-Semaphore-Klasse genutzt: Bevor ein Thread
angefangen hat zu arbeiten hat er mittels WaitOne() gewartet, eine
Erlaubnis zu bekommen. Das hat auch im Prinzip funktioniert, allerdings
stellte ich fest, dass die Threads nicht nach dem FIFO-Prinzip ihre
Erlaubnis bekamen. Das führte zu teils sehr langen Bearbeitungszeiten
für ein Request.
Nun meine Frage: Gibt es mit Bordmitteln eine gute Lösung hierfür?

Ich habe mir selbst eine Lösung erstellt, benötige dazu aber mehrere
Semaphoren, einen Kontroll-Thread und einige
lock(lockObject){...}-Blöcke, so dass ich insgesamt nicht besonders
zufrieden damit bin. Daher wàre ich für Vorschlàge sehr dankbar!

Viele Grüße,
Martin
 

Lesen sie die antworten

#1 Carl-Christian Schaffert
15/07/2009 - 17:21 | Warnen spam
Hallo Martin,


in meiner Anwendung laufen teilweise einige (>100) Threads gleichzeitig
(da es sich um eine Server-Anwendung handelt) und ich habe festgestellt
dass es aus Performancegründen sinnvoll ist, die Anzahl der aktiven
Threads zu begrenzen (auf 4-12 Threads, abhàngig von der Server-Hardware).
Dazu habe ich die .net-Semaphore-Klasse genutzt: Bevor ein Thread
angefangen hat zu arbeiten hat er mittels WaitOne() gewartet, eine
Erlaubnis zu bekommen. Das hat auch im Prinzip funktioniert, allerdings
stellte ich fest, dass die Threads nicht nach dem FIFO-Prinzip ihre
Erlaubnis bekamen. Das führte zu teils sehr langen Bearbeitungszeiten für
ein Request.
Nun meine Frage: Gibt es mit Bordmitteln eine gute Lösung hierfür?

Ich habe mir selbst eine Lösung erstellt, benötige dazu aber mehrere
Semaphoren, einen Kontroll-Thread und einige lock(lockObject){...}-Blöcke,
so dass ich insgesamt nicht besonders zufrieden damit bin. Daher wàre ich
für Vorschlàge sehr dankbar!



Wenn du TPL benutzen kannst hast du deine Sorgen los ;-).
http://msdn.microsoft.com/en-us/con...fault.aspx

Gruß Carl

Ähnliche fragen