[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