[linux-l] Java Thread vs. c fork vs. erlang spawn

Jan Krueger jk at microgalaxy.net
Di Okt 21 19:39:22 CEST 2003


On Tuesday 21 October 2003 15:37, Oliver Bandel wrote:
> On Mon, Oct 20, 2003 at 03:47:38PM +0200, Jan Krueger wrote:
> > Hallo,
> >
> > Weil es so schön ist, in einer Sprache die für sowas gemacht ist: erlang.
>
> Wow, es gibt tatsächlich Erlang-Programmierer hier?!
mindestens einen :)

> Gut zu wissen... :)
>
> BTW: Gibt's denn Erlang auf Linux?
> Habe gehört, erlang sei etwas "experimantal" unter Linux.
> Oder gibt es da brauchbare Implementierungen?
Es gibt jene eine OpenSource vom Urheber der Sprache. Diese nutze ich gerade 
unter meinem FreeBSD-"Linux", diese sollte ja auch unter einem "normalen" 
Linux funktionieren. Bisher bin ich vom Verhalten der VirtualMachine 
"überrascht".
Wenn man z.B. in ca. 150 millisekunden ;) an das Prozess-Limit stößt und die 
VM sich dann einfach selbst neu started, finde ich das nicht erbaulich. Sie 
sollte eher die Prozesse killen und das spawn()-en neuer Prozesse verhindern.
Wenn man zum Beispiel, was sich ja geradezu anbietet, für Netzwerkgeschichten 
das Modell "Ein Prozeß pro Verbindung" wählt und TCP 65000 Verbindungen haben 
darf, erlang aber nur 32000 Prozesse..., hm, müßte man also eine 
Prozeßverwaltung einführen und verliert dadurch wieder ordenlich latenzzeit 
im Vergleich zu ohne Prozeßverwaltung. (Man hat dann zwar immernoch nur einen 
Bruchteil der OS-Thread fork() whatever Latenz, aber in erlang-Maßstäben ist 
das zu viel ;)
Muß mir das mal anschauen, ob man das Limit nicht einfach hochsetzen kann
(long numprocs statt short numprocs oder so?, mal sehen)

Es soll noch eine weitere Implementation geben, allerdings eher für kleinere 
Sachen so wo ich das bisher Verstanden habe. Mit der habe ich mich noch nicht 
auseinander gesetzt. Sollte ich vielleicht mal tun...

> > Ich weiß auch nicht, wieso sich so viele mit Java quälen, oder gar c :)
> > Ok, c fürs Betriebssystem und Treiber, das versteh ich noch, aber sonst?
> > Java?
>
> versteh ich ja auch nicht. :)
>
> Erlang gehört eh mit zu den coolsten Sprachen - funktionale
> Programmierung <hechel> lässt grüßen. :)

Wenn man in erlang leichtgewichtige Prozesse, schwergewichtige gibts ja nicht, 
als Ersatz von in Java Objekten nimmt, wird der Vorteil sehr leicht 
ersichtlich: man hat ständig "lebendige Objekte", während
man in Java erstmal tote Objekte einrichten muß, welche man dann mühsam, quasi 
von Hand per Threads abwechselnd immer mal wieder zum Leben erwecken muß.
Da ist das erlang-sche Prozeßmodell schon sehr viel Vorteilhafter.

So schnell wie man in Java 65000 Objekte haben kann, so schnell kann man in 
erlang dann Prozesse haben, vielleicht sogar noch schneller, wenn dieses 
unpassende Limit nicht währe ...

und erlang hat kleine konsistenz Problemchen, auswahl der falschen funktion im 
richtigen scope, also das überschreiben von in erlang mitgebrachten 
funktionen funktioniert nicht bei allen von erlang mitgebrachten funktionen 
gleichermaßen gut. Wenn man es weiß, kann man es beachten. Und wenn unix so 
konsistent währe wie erlang -- hui, wär die Welt in Ordnung :)

Gruß
Jan





Mehr Informationen über die Mailingliste linux-l