Last gerech auf Threads verteilen? - Aber wie?

Hallo zusammen,

ich such’ jetzt schon länger bei googel und co hab aber noch nicht die Lösung meines Problemes…

Und zwar will ich ca. 2400 Abfragen durchführen…
Das ganze soll über Threads laufen…
Soweit hab ich das schon geschafft…
Zur Zeit laufen sechs Threads welche jeweils 400 Abfragen erledigen…

ABER:

Mein Problem besteht darin, dass nicht jede Abfrage gleich lange dauert…
Sprich: Thread 1 ist noch voll beschäftigt während 2, 3 und 4 nichts mehr zu tun haben…

Meine Idee war, alle Abfragen in ein Array zu schreiben und dann den Threads zu sagen:
„Wenn du fertig bist, dann nimm dir die nächste Abfrage vom Anfang der Arrays“

Leider hab ich das nicht geschafft weil die Threads nicht auf mein Array zugreifen können…

Wie funktioniert das?
Hat da schon jemand Erfahrung??

Danke für eure Hilfe
Andy

Hallo,

Mein Problem besteht darin, dass nicht jede Abfrage gleich
lange dauert…
Sprich: Thread 1 ist noch voll beschäftigt während 2, 3 und 4
nichts mehr zu tun haben…

Meine Idee war, alle Abfragen in ein Array zu schreiben und
dann den Threads zu sagen:
„Wenn du fertig bist, dann nimm dir die nächste Abfrage vom
Anfang der Arrays“

Leider hab ich das nicht geschafft weil die Threads nicht auf
mein Array zugreifen können…

Du solltest eine Queue anstatt eines Arrays nehmen, und zwar eine, die threading safe ist.

Wie das geht ist in perldoc perlthrtut nachzulesen, oder online hier:

http://perldoc.perl.org/perlthrtut.html
insbesondere
http://perldoc.perl.org/perlthrtut.html#Threads-And-…
ist für dich von Interesse.

Grüße,
Moritz

Hallo Moritz,

danke für den Hinweis, ich werd’ mir das gleich mal anschaun…

Big Thx
Andy

Hallo Andy,

Queues haette ich auch vorgeschlagen. Es gibt dafuer z.B. das Modul Threads::Queue, welches das ganz gut erledigt.
http://perldoc.perl.org/Thread/Queue.html