User since
2006-01-03
5
Artikel
BenutzerIn
Hallo!
Ich benutze in meinem Script das Modul IO::Pipe, um Nachrichten von verschiedenen Children (in Normalfall genau 71) an ihren Vater zu schicken. Da alle Nachrichten eigentlich gleich aufgebaut sind und am Ende sowieso in einen grossen Pool 'geworfen' werden, habe ich dazu nur genau eine Pipe verwendet. Ausserdem kann ich so vermeiden, durch das Abfragen von allen 71 Pipes viel Zeit zu verlieren.
Allerdings kommt es jetzt zu einem unerklärlichen Datenverlust - wobei das heisst, das etwa drei Infos von 100.000 verloren gehen. Die Moduldokumentation schweigt sich leider dazu aus, ob es überhaupt gesund ist, mit mehr als einem writing-end zu arbeiten, aber meine erste Überlegung war, ob sich da vielleicht die Enden in die Quere kommen.
Kann mir da jemand weiterhelfen oder vielleicht sogar einen Tipp geben, wie man solch einen Verlust (wenn es ihn den tatsächlich über die Pipe gibt) vermeiden kann?!
Herzlichsten Dank!
Pygoscelis
User since
2003-08-04
7321
Artikel
ModeratorIn
arbeite mit msgid's.
wenn der client merkt, dass ein message fehlt, weil er message 1 und message 3 empfangen hat, mäkert er und verlangt nochmal message 2
User since
2006-01-03
5
Artikel
BenutzerIn
Hi,
Das heisst dann aber auch, dass ich für jeden der Child-Prozesse eine Pipe in die andere Richtung brauche, um das 'Gemecker' auch hinzuschicken? Na - dann versuch ich das doch einfach mal.
Danke auf jeden Fall schon mal für den Tipp!
User since
2003-08-04
7321
Artikel
ModeratorIn
hmm...
arbeitest du mit named-pipes oder mit normalen (unnamed pipes)... unter windows zumindest sind die named-pipes recht stabil. der Papa macht einen auf und kann dann mit den kindern sprechen und ihnen auch zuhören.
User since
2006-01-03
5
Artikel
BenutzerIn
Ich arbeite mit anonymous pipes unter Linux :)
User since
2003-08-04
7321
Artikel
ModeratorIn
[quote=pygo,03.01.2006, 12:05]Ich arbeite mit anonymous pipes unter Linux :)[/quote]
hmm.
gibt es named pipes unter linux ?
wäre das eine alternative ?
aber im grunde musst du dann doch 71 * 2 pipe-handles im papa haben oder ? und jedes kind hat nur 2 pipe-handles (eine zum Lesen, eine zum Schreiben).
User since
2006-01-03
5
Artikel
BenutzerIn
Ja die gibt es. Benutze ich sogar selbst, aber nur, um mit nicht-familiären Prozessen zu kommunizieren. Werden halt wie Dateien verwendet und ich glaube, damit geht einer meine Leseoperationen flöten (die ein Objekt als Handle benötigt, weil sie mit Data::Select arbeitet). Deshalb würde ich ungern wechseln.
Ich bin gerade dabei, mal einen Testlauf mit einseitigen Message-IDs zu machen. Sprich, der Vater soll mir einfach mal sagen, bei welchem der Kinder da irgendeine Message nicht da zu sein scheint. Dann kann ich zumindest schon mal rausfinden, ob es wirklich daran liegt oder ich doch irgendwas anderes überesehen habe.
User since
2006-01-03
5
Artikel
BenutzerIn
Nur als Info mal: Ich hab den Testlauf seit gestern durchlaufen lassen und von den 71 Kindern wurden zwischen 4000 und 200.000 Nachrichten geschickt. In sechs Fällen sind dabei zwischen 2 und gleich 10 Nachrichten von jeweils einem Kind verloren gegangen. In irgedneiner Weise scheint es also tatsächlich in der Pipe zu verlusten zu kommen... :(