Class: Proc
Overview
Quelques methodes ajoutees a la classe Proc, donc avec "monkey patch", pour permettre la creation de pipelines et de fermes (farms), et ce directement a partir d'un objet de classe Proc (lambda, fonction anonyme).
Il s'agit donc une forme de conversion implicite d'une lambda en un pipeline.
Instance Method Summary collapse
- #&(other) ⇒ Object
-
#*(nb) ⇒ PRuby::Pipeline
Un Proc qui recoit ce message est implicitement utilise comme une ferme ayant le nombre indique de travailleurs.
-
#go(*canaux) ⇒ Thread
Lance l'execution d'une lambda dans un Thread indepdendant, lambda qui utilise une serie de canaux de communication (Channel) pour interagir avec d'autres processus.
-
#|(other) ⇒ PRuby::Pipeline
Un Proc qui recoit ce message est implicitement transforme en un premier etage de pipeline, ou le 2e etage est l'autre argument (other).
Instance Method Details
#&(other) ⇒ Object
26 27 28 |
# File 'lib/proc.rb', line 26 def &( other ) (PRuby::Pipeline.create self).add_stage( other ) end |
#*(nb) ⇒ PRuby::Pipeline
Un Proc qui recoit ce message est implicitement utilise comme une ferme ayant le nombre indique de travailleurs.
36 37 38 |
# File 'lib/proc.rb', line 36 def *( nb ) PRuby::PipelineFactory.farm self, nb end |
#go(*canaux) ⇒ Thread
Lance l'execution d'une lambda dans un Thread indepdendant, lambda qui utilise une serie de canaux de communication (Channel) pour interagir avec d'autres processus.
Plus specifiquement, la methode vise a emuler la facon utilisee en go pour lancer l'execution d'une goroutine, et ce en utilisant les methodes appropriees definies dans la classe Channel:
- Go:
func p1( cin chan int, cout chan int ) {
n <- cin
cout <- 2 * n + 1
close( cout )
}
go p1( c0, c1 )
c0 <- 10
<- c1 # Retourne 21
- PRuby
p1 = lambda do |cin, cout|
n = cin.get
cout << 2 * n + 1
cout.close
end
p1.go( c0, c1 )
c0 << 10
c1.get # Retourne 21
71 72 73 |
# File 'lib/proc.rb', line 71 def go( *canaux ) Thread.new { call *canaux } end |
#|(other) ⇒ PRuby::Pipeline
Un Proc qui recoit ce message est implicitement transforme en un premier etage de pipeline, ou le 2e etage est l'autre argument (other).
22 23 24 |
# File 'lib/proc.rb', line 22 def |( other ) (PRuby::Pipeline.create self).add_stage( other ) end |