Re: n Prozesse starten - Computer Language Shootout
Enrico Schwass <[email protected]> Mon, 18 Oct 2004 10:24:51 +0200
| Newsgroups | gmane.comp.lang.ruby.german |
|---|---|
| Message-ID | <[email protected]> |
Hallo Michael
>Weisst du warum das so langsam ist? Du solltest keine Zufallszahlen
>verwenden. Denn, dann kannst du lange warten bis alle beendet sind.
:) Beim Benchmark habe ich nat=FCrlich diese Zeilen auskommentiert.
>Ausserdem, es l=E4uft ja immer nur ein Thread, und es kann gut sein, da=
s
Hmm... das w=FCrde ja der Intention von threads widersprechen. Ach du
meinst weil der Prozessor immer nur jeweils einen in der Zeitscheibe
abarbeitet.
>du "check" mehrmals zuweist, bevor =FCberhaupt ein anderer Thread an di=
e
>Reihe kommt um zu pr=FCfen ob er sich nun beenden soll.
Ja, stimmt. Zum Benchmark sah das Programm auch eher so aus. Das
erf=FCllt die Aufgabenstellung =E4ndert aber nat=FCrlich nichts an der sc=
hlechten
Performance.
> threads =3D []
>
> # Anzahl der Threads als Argument
>
> n =3D ARGV[0].to_i
>
> # Condition variable
>
> check =3D 0
>
> for t in 1..n
> threads << Thread.new(t) { |my_t|
> loop do
> break if my_t =3D=3D check
> end
> }
> end
> check =3D 1 # beende zur Demonstration den ersten Thread
> # bei Programmende enden alle Threads
> Ich habe das ganze mal mit Mutexes geschrieben:
Die Idee hatte ich kurz darauf. Versprach mir allerdings keinen=20
Geschwindigkeitsvorteil.
Wenn du aber berichtest, das du 1000 Threads in 2 Sekunden laufen l=E4sst=
=20
ist das eine ganz
erhebliche Steigerung. Interessant.
>Das erste Beispiel dauert bei mir bei 1000 Threads so ca. 2 Sekunden.
>Das zweite nur 1,5. Und wenn du das t.join direkt hinter t.wakeup setzt=
,
>dann ist es nochmals doppelt so schnell.
Da die Threads durchaus mit dem Hauptprogramm beendet werden k=F6nnen,
hatte ich auf das join verzichtet. Ich schau mir deine Beispiele in=20
aller Ruhe an und melde
mich dann wieder.
Bis die Tage
Enno