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

Jan Krueger jk at microgalaxy.net
Mo Okt 20 15:47:38 CEST 2003


Hallo,

Weil es so schön ist, in einer Sprache die für sowas gemacht ist: erlang.

-module(proc).
-export([go/0, loop/1, bla/0]).
-import(io, [write/1, nl/0]).
-import(timer, [sleep/1, tc/3]).

go() ->
	write(tc(proc, loop, [1000] )),
	nl().

bla() -> sleep( 1000 ).

loop(0) -> 1;
loop(N) when N > 0 -> 
	spawn(proc, bla, []),
	loop(N - 1).

Dauert genau circa 3,5 millisekunden auf meinem Athlon XP 2400.
Erlang läuft ebenfalls als Bytecode in einer Virtual Machine, deswegen ist der 
wert nicht so genau und schwankt zwischen 2,irgendwas und 4,irgendwas.
spawn/3 ist richtig preiswert in erlang, kommt sofort zurück, völlig asynchron 
usw.. erlang, logisch, benutzt nicht die threads vom OS, sondern eigene.
für das erzeugen von 30000 erlang prozessen (das limit von erlang liegt bei 
32000 prozessen) benötigt erlang ca. 150 millisekunden :)
Das sind schöne werte, gell? Schöner code auch, gell?
(kleine Erläuterung: write = schreibe nach stdio, tc = messe zeit für funktion 
loop(1000) aus modul proc unbd gebe microsekunden zurück, nl = gebe einen 
new-line aus, spawn = neuer prozeß aus bla(), bla schläft 1000 millisekunden, 
loop ist recursiv [es gibt kein while oder for oder so in erlang], falls 
loop(0) mache nix weiter und gehe zurück, gehe nicht über los [hätte man auch 
mit if in einer loop funktion machen können])

Zum Vergleich dazu die Werte von time ./tfork auf meinem Athlon (ähm, unter 
meiner FreeBSD-5.1-CURRENT-"Linux"-Distribution):
real    0m0.197s
user    0m0.000s
sys     0m0.098s

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? 
*kopfschüttel*

;)

Gruß
Jan





Mehr Informationen über die Mailingliste linux-l