Alors, j'ai écrit un exemple de fil rapide pour moi-même, en utilisant les docs de rubis pour le fil:Essayer de comprendre Threading en Ruby. Le code de test ne fonctionne pas comme prévu, pourquoi?
puts "Hello World"
test = Thread.new do
while true
puts Time.now
end
end
puts "Goodbye World"
Je me attendrais ce code à courir pour toujours, l'impression « Bonjour tout le monde », quelques horodateurs, monde au revoir, et puis tout un tas d'horodatages, jusqu'à ce que je casse manuellement le code.
Au lieu de cela, ce que je reçois est quelque chose comme:
Hello World
Fri Aug 06 09:08:27 -0400 2010
Fri Aug 06 09:08:27 -0400 2010
Fri Aug 06 09:08:27 -0400 2010
Fri Aug 06 09:08:27 -0400 2010
Fri Aug 06 09:08:27 -0400 2010
Fri Aug 06 09:08:27 -0400 2010
Fri Aug 06 09:08:27 -0400 2010
Fri Aug 06 09:08:27 -0400 2010
Fri Aug 06 09:08:27 -0400 2010
Goodbye World
Et puis le programme se termine. Je suis vraiment confus ici. Les threads se terminent-ils dès que la prochaine ligne de code aurait démarré? Est-ce qu'ils expirent? Je l'ai essayé d'ajouter
sleep 1
avant et après l'instruction met ... mais cela signifie simplement que les impressions de fil moins horodateurs (si le sommeil est avant puts, il imprime rien, juste bonjour et au revoir, si après, il imprime exactement un horodatage avant de quitter).
Je n'ai pas le plus d'expérience de threading ... mais cela ne me semble vraiment pas intuitif ... Est-ce que je fais quelque chose de mal? Utiliser les threads de manière incorrecte? Est-ce que je le fais bien mais suis confus au sujet de ce que les fils sont/font?
Pour accomplir ce qu'elle attend, la jointure aurait besoin d'être * après * le message "au revoir". – cHao