Programmation Ruby/Programmation concurrente
Ruby intègre nativement la notion de processus et de processus léger.
Utiliser des processus légers
modifierLes processus légers sont représentés par la classe Thread. À la construction du thread, on passe un bloc qui sera exécuté.
# Un entier, un thread qui l'incrémente
# et un thread qui le décrémente
i = 0
Thread.new {
while true
i = i + 1
puts i
end
}
Thread.new {
while true
i = i - 1
puts i
end
}
Synchroniser des données
modifierDans l'exemple ci-dessus, la variable i est partagée. Cela peut poser un problème de synchronisation. Pour le résoudre, on utilise un sémaphore. Pour qu'un objet soit synchronisé, il faut lui ajouter un attribut Mutex.
Arrêter un thread
modifierPour arrêter un thread proprement, on affecte son attribut @continue à faux (par exemple dans une méthode #stop).
On peut arrêter un thread de façon brutale avec un appel à Thread#terminate.