Perl / Thread / Pipes / IPC / Win32
am 08.12.2006 19:30:47 von ronny.kluge
Hallo zusammen,
nachdem ich mit fork unter Windows nur max. 64 Prozesse erstellen
konnte bin ich nun dabei das ganze über Threads zu lösen. Mir stellt
sich jetzt dabei die Frage wie ich sinnvoll zwischen dem Parent-Thread
und seinen Child-Threads bidirektionale Pipes erstellen kann !?
Bei meinen bisherigen Überlegungen (Siehe Programm-Bsp.) versuchen
anscheinend alle Childs ein und die selbe Pipe zu benutzen,.. Schliesse
ich keine Handels erhalte ich ebenfalls Fehlermeldungen ..
Mein Ziel ist es einen Vaterprozess zu erstellen der mit seinen Childs
gezielt kommuniziert und diese mit ihm. Später soll eine bestimmte
Anzahl Childs permanent gestartet sein und vom Parent-Thread Aufträge
entgegen nehmen oder eben auf welche warten. Somit entgehe ich der
permanent hohen Systemauslastung die durch das Erstellen/Beenden der
Threads bei einer Vielzahl von Prozessen entsteht.
Habt Ihr dazu Ideen/Lösungen ?
Gruß, Ronny Kluge.
use Thread;
# Threads erstellen
for ($a=3D0;$a < 3;$a++)
{
pipe ($readv, $write);
pipe ($read, $writev);
close $write;
close $read;
$e =3D Thread->new(\&child);
}
foreach $thread (Thread->list)
{
syswrite ($writev,"Test\n") or print "can not syswrite -
Father->Client $!\n";
sysread ($readv,$info,100) or print "can not sysread - Father<-Client
$!\n";
print "Father: $info from Child\n";
close $readv;
close $writev;
$back =3D $thread->join;
print "Child-back:$back\n";
}
sub child
{
local ($tid);
local ($test);
$tid =3D Thread->self->tid;
close $readv;
close $writev;
sysread ($read,$test,100) or print "can not sysread - Father<-Client
$!\n";
print "Child: $test from Father\n";
syswrite ($write,"child-pid: $tid\n") or print "can not syswrite -
Client->Father $!\n";
close $read;
close $write;
return ("Child Exit.");
}
Re: Perl / Thread / Pipes / IPC / Win32
am 09.12.2006 15:22:50 von Thomas Wittek
ronny.kluge@barmenia.de schrieb:
> nachdem ich mit fork unter Windows nur max. 64 Prozesse erstellen
> konnte bin ich nun dabei das ganze über Threads zu lösen. Mir stellt
> sich jetzt dabei die Frage wie ich sinnvoll zwischen dem Parent-Thread
> und seinen Child-Threads bidirektionale Pipes erstellen kann !?
Welches Problem willst du denn überhaupt lösen? Vielleicht bekommt man
das ja auch ohne Pipes und mit threads::shared und Thread::Queue
(und/oder weiteren Modulen) hin.
Habe in der Kombination relativ gute Erfahrungen gemacht (mal davon
abgesehen, dass Threading in Perl5 allgemein nicht so toll ist...).
--
Thomas Wittek
http://gedankenkonstrukt.de/
Jabber: streawkceur@jabber.i-pobox.net
Re: Perl / Thread / Pipes / IPC / Win32
am 10.12.2006 16:16:03 von ronny.kluge
Thomas Wittek schrieb:
> Welches Problem willst du denn überhaupt lösen? Vielleicht bekommt man
> das ja auch ohne Pipes und mit threads::shared und Thread::Queue
> (und/oder weiteren Modulen) hin.
>
> Habe in der Kombination relativ gute Erfahrungen gemacht (mal davon
> abgesehen, dass Threading in Perl5 allgemein nicht so toll ist...).
>
> --
> Thomas Wittek
> http://gedankenkonstrukt.de/
> Jabber: streawkceur@jabber.i-pobox.net
Hallo,
ich verfolge damit vorerst kein bestimmtes Problem. Das Thema ist quasi
eine Vorstufe zur Netzwerkprogrammierung unter Perl. Ein Server der die
Anfragen auf seine Childs verteilt etc.=20
Gruß, Ronny.
Re: Perl / Thread / Pipes / IPC / Win32
am 10.12.2006 18:52:04 von Thomas Wittek
ronny.kluge@barmenia.de schrieb:
> Thomas Wittek schrieb:
>> Welches Problem willst du denn überhaupt lösen?
>
> Ein Server der die Anfragen auf seine Childs verteilt etc.
Ich habe einen (einfachsten) multithreaded HTTP-Server ohne Pipes
geschrieben.
Den Code kannst du dir unter
http://gedankenkonstrukt/wiki/?wiki_page=Perlscripts im Abschnitt
RSSCache runterladen. Das interessante Modul wäre dann RSSCache::HTTPServer.
Vielleicht hilft das ja für den Anfang.
Schöne Grüße!
--
Thomas Wittek
http://gedankenkonstrukt.de/
Jabber: streawkceur@jabber.i-pobox.net
Re: Perl / Thread / Pipes / IPC / Win32
am 10.12.2006 19:01:30 von Thomas Wittek
Thomas Wittek schrieb:
> Den Code kannst du dir unter
> http://gedankenkonstrukt/wiki/?wiki_page=Perlscripts im Abschnitt
> RSSCache runterladen.
Es wäre
http://gedankenkonstrukt.de/wiki/?wiki_page=Perlscripts
gewesen.
Leider is der Server im Moment down, muss mal den Admin anhauen, was da
los ist...
--
Thomas Wittek
http://gedankenkonstrukt.de/
Jabber: streawkceur@jabber.i-pobox.net