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

Jan Krueger jk at microgalaxy.net
Mi Okt 22 07:54:08 CEST 2003


On Tuesday 21 October 2003 19:39, Jan Krueger wrote:
> 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.
Phuu, macht sie zum Glück auch nicht. lediglich der interaktive Shell-Prozeß 
welcher nur ein erlang prozeß ist, wird neu gestarted und hat mir so 
vorgetäuscht, daß die VM neu gestarted wird. Hat erlang nochmal Glück gehabt.

Habe nochwas schönes gemessen: Die Zeit vom spawn bis zum eigentlichen 
ausführen von code im neuen prozess.

Bei erlang unter FreeBSD 5.1 und 30000 Prozessen steigt diese von 41 
microsekunden, schwankt dann um die 500 microsekunden und der maximalwert ist 
11 millisekunden auf meinem Athlon XP 2400.

Interessanterweise sind diese Werte von erlang unter Windows 2000 auf einem 
VIA C3 800MHz im Schnitt kleiner und konstanter: beginnend bei 255 
microsekunden, dann ständig bei 334 microsekunden und immer wieder mal bei 8 
oder 9 millisekunden.

Da muß ich mir doch glatt mal wieder ein richtiges, aktuelles kernel 
2.6.irgendwas Linux installieren um zu sehen wie es da ist ...

Und da geht es auch schon wieder los:
Welche Distribution soll ich nehmen?

Gruß
Jan

%% Aufzurufen aus der erl shell mit c(proc).
%% dann proc:go(anzahl gewünschter Prozesse).
%% Der . am Ende oben muß mitgetippt werden
-module(proc).
-export([go/1, loop/1, bla/1]).
-import(io, [write/1, nl/0]).
-import(timer, [now_diff/2, sleep/1, tc/3]).

go(A) ->
	TT = tc( proc, loop, [A] ),
	sleep( 20000 ),
	io:write( [ 'Total time: ', TT] ),
	io:nl().

bla(T) ->
	TN = now(),
	sleep( 10000 ),
	ND = now_diff( TN, T ),
	io:write( [ND] ).

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





Mehr Informationen über die Mailingliste linux-l