AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Geschwindigkeit Anonymous Pipes vs Named Pipes vs Mailslots
Thema durchsuchen
Ansicht
Themen-Optionen

Geschwindigkeit Anonymous Pipes vs Named Pipes vs Mailslots

Ein Thema von Arakis · begonnen am 13. Apr 2004 · letzter Beitrag vom 15. Apr 2004
Antwort Antwort
Seite 1 von 2  1 2      
Arakis

Registriert seit: 29. Aug 2002
30 Beiträge
 
#1

Geschwindigkeit Anonymous Pipes vs Named Pipes vs Mailslots

  Alt 13. Apr 2004, 09:51
Ich habe einen Serverprozess mit bis zu ca. 10 Clientprozessen, auf dem selben Computer am laufen. Es soll eine extrem hohe(!) Kommunikation in Form vom Nachrichten von 30-1000 Bytes stattfinden. Alle Prozesse haben KEIN Window.

Ein paar Geschwindigkeitsmessungen auf einem AMD 1,3 Ghz, Windows XP:
Windowsmessages von per PostThreadMessage():
ca. 150.000 Messages pro Sekunde
ca. 50.000 Messages pro Sekunde mit Warten auf Antwort

Faziz: Sehr schnell, kann aber "nur" zwei 32-Bit-Zahlen transportieren


Memory Mapped Files(Shared Memory)
Es gibt für jede Sprachrichting eine Memory Mapped File, zu sendende Daten werden hinein geschrieben und eine Windowsmessage gesendet mit Offset und Länge des Datenpacketes in der Remote-Datei um den Remoteprozess über ein neues Datenpacket zu benachrichtigen
ca. 12.000 Nachrichten(Länge 20-100 Bytes) pro Sekunde mit Warten auf Antwort
Wie lange das Senden ohne zu Warten dauert habe ich "vergessen"
Problematiken: Die "selbstgeschribene" Pipeline muss regelmäßig rotiert bzw. geleert werden.

Anomymous Pipes
2 Pipes, eine für jede Richtung. Auf beiden Seiten wird mit Hilfe von ReadFile() "gelauscht". Eine Zeitmessung habe ich noch nicht durchgeführt. Etwas anderes macht mir da "mehr" Sorgen: Serverseiting wird für jeden Client ein sperater Thread benötigt, da ReadFile() sich auf nur ein File-Handle bezieht.

Named Pipes
Ist mir ne Nummer zu "hoch", und meine Bedenken sind dass Named Pipes einen zu großen "Overhead" haben.

Mail Slots
Nachriten basiertes System. Vorteil: Es sind Broatcast-Nachrichten möglich. Nachteil: Es wird NICHT garantiert dass das Packet angekommen ist.


In meiner Anwenund gibt es folgende Nachrichtentypen:
Send Only
Beispiel: Ein Protokollierungseintrag wird abgeschickt, Der Client arbeitet sofort weiter, eine Benachrichtigung ob Erfolgreich ist nicht notwenidg
Mein Vorschlag zu Realisierung: Mail Slot oder Anonymouse Pipe in einer Richting.

Send And Notify
Beispiel: Der Client aktualisiert einen Wert auf dem Server. Als Benachrichtigung nach der Aktualisierung wäre eine Windowsmessage denkbar.

GetData
Beispiel: Ein Wert wird abgefragt. Die Anfrage wird gestellt(ca. 20-100 Bytes), es wird gewartet bis der Server Antwortet.
Mein Vorschlag zur Realisierung: zwei Anoymous Pips oder eine Named Pipe, Mail Slot oder Memory Mapped File mit windowsmessage-Benachrichtigung


Die Wahl der Transportmöglichkeit ist durch folgende Dinge zu überlegen:
- Transportgeschwindigkeit
- Effizienz beim Abfragen der ankommenden Daten

Da ich in der Regel immer in 2 Richtiungen kommunizieren muss("Send Only" ist extrem seltend, daher mache ich mir darüber jetzt keine Gedanken) ist die Situation folgende:
Die Lösung mit Memory Mapped Files-Lösung benötigt auf der Clientseiete eine MMF und eine Messagequeue, auf Serverseite ebenfalls. Auf Serverseite jedoch könnte ein einziger Thread(MessageQueue) an mehreren Verbindungen lauschen.

Für Anomous Pipes wird IMMER pro Sprachrichtung ein Thread zum lauschen benötigt.

Named Pipes sind mir ne Nummer zu "hoch"

Mit Mailslots habe ich noch nicht gearbeitet.

Nächste Problematik wäre dann das Bearbeiten der Packete auf der Serverseite. Ich bin am überlegen ob für jede Anfrage geschaut werden soll wie "zeitaufwendig" sie ist. Ist sie vorraussichtilich "zeitaufwendig" soll sie in einem neuen Thread bzw. in einem Thread im Threadpool ausgeführt werden.

Nun, was ist die schnellste und effzienteste Lösung?
Mir fehlt es halt ein bisschen an Erfahrung bei der "High Performance" Inter Process Communikation

Ist als "Benachrichtiung" ein WaitHandle bzw. Event(per Handle) schneller/effizienter als eine Windowsmessage?

Gibt es eigentlich 3rd-Party Lösungen für IPC?
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2

Re: Geschwindigkeit Anonymous Pipes vs Named Pipes vs Mailsl

  Alt 13. Apr 2004, 10:04
Named Pipes sind merklich langsamer. Für Messages mit 4KB Größe hast Du im Schnitt einen Durchsatz von 10.000 Nachrichten je Sekunde bei ca. 80% Prozessorauslastung (Worst-Case-Scenario!). Selbst das sollte aber eigentlich reichen. In Momenten mit solch einem Datendurchsatz sollte man das Design seiner Software überprüfen und mehrere Datenmengen bündeln

Getestet mit folgenden Komponenten: http://www.delphipraxis.net/internal...?p=36961#36961 (Nicht auf Geschwindigkeit optimiert und nach jeder Verbindung wurde diese wieder automatisch geschlossen! Wenn man die Verbindung offen hält, dann kann man einen deutlich höheren Durchsatz erreichen.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#3

Re: Geschwindigkeit Anonymous Pipes vs Named Pipes vs Mailsl

  Alt 13. Apr 2004, 10:07
Nachtrag: Mail Slots sind ca. 30% schneller als Named Pipes aber haben den von Dir genannten Nachteil, daß die Übertragung der Nachrichten nicht garantiert ist.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Arakis

Registriert seit: 29. Aug 2002
30 Beiträge
 
#4

Re: Geschwindigkeit Anonymous Pipes vs Named Pipes vs Mailsl

  Alt 13. Apr 2004, 10:29
Wie steht es mit Performance Anonymous Pipes vs Named Pipes?

Hier gibt es zwar ne Menge Infos, aber leider keine Konkrete Aussage zur Geschwindigkeit:
http://msdn.microsoft.com/library/de...unications.asp
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#5

Re: Geschwindigkeit Anonymous Pipes vs Named Pipes vs Mailsl

  Alt 13. Apr 2004, 10:43
hallo ,


habe mal was gelesen, das es auch first Class mailslots gibt, die einen garantierten verbindungsorientierten Nachrichtenaustausch machen.

nur die second class mailslots garantieren keine nachrichtenübermittlung.

raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#6

Re: Geschwindigkeit Anonymous Pipes vs Named Pipes vs Mailsl

  Alt 13. Apr 2004, 10:44
Kann ich leider auch nicht sagen - mit denen habe ich noch nicht gearbeitet Hilft nur selber testen.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Arakis

Registriert seit: 29. Aug 2002
30 Beiträge
 
#7

Re: Geschwindigkeit Anonymous Pipes vs Named Pipes vs Mailsl

  Alt 13. Apr 2004, 11:14
Hm, Mailslots 30% schneller...hört sich gut an. Aber: Wenn ich nun eine eigene Benachrichtiung einbauen würde, würden dann 30% verlohren gehen?

Vorgehensweise:
Code:
Sendender Thread auf Client:
Packet Senden
WaitForSingleObject()

Empfangender Thread auf Server:
Packet abfragen
Client entsperren(Waithandle ist im Packet enthalten)
Mal ne andere Frage: Kann ein Packet lokal überhaupt verlohren gehen?
Wieviel Messages(Packete) kann ein Mailslot speichern?

Wie fragt man Messages "effizent" ab? Also per Timer schon mal "sehr" schlecht
Sollte der Server per WaitHandle informiert werden? Per Windowsmessage? Oder verweilt ReadFile() so lange bis eine neue Nachricht da ist?
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#8

Re: Geschwindigkeit Anonymous Pipes vs Named Pipes vs Mailsl

  Alt 13. Apr 2004, 11:19
Zitat von Arakis:
Hm, Mailslots 30% schneller...hört sich gut an. Aber: Wenn ich nun eine eigene Benachrichtiung einbauen würde, würden dann 30% verlohren gehen?
Nach Milchmädchenrechnung würdest Du dadurch 40% verlieren

Zitat von Arakis:
Mal ne andere Frage: Kann ein Packet lokal überhaupt verlohren gehen?
Gute Frage, nächste Frage. Ich denke mal ja.

Zitat von Arakis:
Wieviel Messages(Packete) kann ein Mailslot speichern?
Wieder eine gute Frage... Ich glaube bis der RAM/Swap voll ist.

Zitat von Arakis:
Wie fragt man Messages "effizent" ab? Also per Timer schon mal "sehr" schlecht
Stimmt, Timer ist miserabel und langsam.

Zitat von Arakis:
Sollte der Server per WaitHandle informiert werden? Per Windowsmessage? Oder verweilt ReadFile() so lange bis eine neue Nachricht da ist?
Schau mal in die Komponenten von oben, nach dem Schema solltest Du da schon vorgehen. (Auch mit WaitHandle).

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#9

Re: Geschwindigkeit Anonymous Pipes vs Named Pipes vs Mailsl

  Alt 13. Apr 2004, 11:25
vielleicht mal als denkanstoss:
http://www.entwickler-forum.de/WebX?...avZ.4@.ee6d93f


raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Arakis

Registriert seit: 29. Aug 2002
30 Beiträge
 
#10

Re: Geschwindigkeit Anonymous Pipes vs Named Pipes vs Mailsl

  Alt 13. Apr 2004, 11:50
Zitat:
Gute Frage, nächste Frage. Ich denke mal ja
oh gott, schrecklich! Ich sehe es schon vor mir: "Ich habe Waren zu meinem Planeten gebeamt aber sie sind nicht angekommen! - Ich habe auf einem auf ein Schiff geschossen aber die Hülle ist nicht weniger geworden." Ach ja, wer sich für meine Anwendung interessiert: www.stne.net

Also ich muss den Server benachritigen wenn neue Daten da sind um effizent antworten zu können, und der Server muss den Empfang auch noch bestätigen...daher stellt sich die Frage ob Anonymous Pipes bzw. Named Pipes da nicht schneller sind.

Zitat:
Schau mal in die Komponenten von oben, nach dem Schema solltest Du da schon vorgehen. (Auch mit WaitHandle).
wo?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz