Hier ist ein einfaches Beispiel der Verwendung von Fäden:
use strict;
use warnings;
use threads;
sub threaded_task {
threads->create(sub {
my $thr_id = threads->self->tid;
print "Starting thread $thr_id\n";
sleep 2;
print "Ending thread $thr_id\n";
threads->detach(); #End thread.
});
}
while (1)
{
threaded_task();
sleep 1;
}
Dies wird ein Thread in jeder Sekunde erstellen. Der Thread selbst dauert zwei Sekunden.
Weitere Informationen zu Threads finden Sie unter the documentation. Eine wichtige Überlegung ist, dass Variablen nicht zwischen Threads geteilt werden. Duplizierte Kopien all deiner Variablen werden erstellt, wenn du einen neuen Thread startest.
Wenn Sie gemeinsame Variablen benötigen, look into threads::shared
.
Bitte beachten Sie jedoch, dass das richtige Design davon abhängt, was Sie tatsächlich tun. Was aus Ihrer Frage nicht klar ist.
Einige andere Kommentare zu Ihrem Code:
- Immer
use strict;
helfen Sie Best Practices in Ihrem Code verwenden.
- Die korrekte Deklaration einer lexikalischen Variablen ist
my $gg;
statt local $gg;
. local
erstellt tatsächlich keine lexikalische Variable; Es gibt einen lokalisierten Wert für eine globale Variable. Es ist nicht etwas, das Sie sehr oft verwenden müssen.
- Vermeiden Sie Subroutinen den gleichen Namen wie Systemfunktionen (z. B.
print
). Das ist verwirrend.
- Es wird nicht empfohlen,
&
vor dem Aufruf von Subroutinen zu verwenden (in Ihrem Fall war es wegen eines Konflikts mit einem Systemfunktionsnamen notwendig, aber wie gesagt, das sollte vermieden werden).
Gute Antwort. Wissen Sie, was ist eine gute Quelle für das Verständnis von Threads in Bezug auf mehrere Threads Lesen und Schreiben der gleichen globalen Variablen gleichzeitig? – Myforwik
@Myforwik, sehen Sie bitte das Update auf die Antwort. Variablen werden nicht zwischen Threads geteilt. Sie müssen dafür 'threads :: shared' verwenden. Die zwei Dokumentationslinks, die ich der Antwort hinzugefügt habe, sollten helfen, dies zu verstehen. –
Danke, es wird tun ... /// – NewBee