Module: PRuby
- Defined in:
- lib/pruby/pruby.rb,
lib/pruby/future.rb,
lib/pruby/stream.rb,
lib/pruby/channel.rb,
lib/pruby/version.rb,
lib/pruby/pipeline.rb,
lib/pruby/task_bag.rb,
lib/pruby/array-range.rb,
lib/pruby/pipeline-factory.rb
Defined Under Namespace
Modules: PArrayRange Classes: Channel, FarmNode, PRubyFuture, Pipeline, PipelineFactory, PipelineNode, ProcNode, Stream, TaskBag
Constant Summary
- GO_ON =
Constantes speciales pour les noeuds de types "fastflow".
:PRUBY_GO_ON
- NONE =
Alias
GO_ON
- MANY =
:PRUBY_MANY
- EOS =
:PRUBY_EOS
- VERSION =
'0.5.1'
- TaskPool =
TaskBag
Class Attribute Summary collapse
-
.nb_tasks_created ⇒ Fixnum
readonly
Nombre de taches creees lors de l'execution de pcall, future ou version dynamique de peach, peach_index, pmap ou preduce.
-
.nb_threads ⇒ Fixnum
Nombre de threads a utiliser par defaut pour l'execution de peach, peach_index, pmap, preduce.
-
.nb_threads_used ⇒ Fixnum
readonly
Nombre de threads effectivement utilises pour l'execution de peach, peach_index, pmap, preduce.
-
.thread_kind ⇒ :THREAD, :FORK_JOIN_TASK
writeonly
Indique la sorte de threads desire pour l'execution d'un pcall.
-
.with_exact_nb_tasks ⇒ Bool
writeonly
Assure que le decompte du nombre de tache soit fait de facon exacte.
-
.with_exact_nb_tasks? ⇒ Bool
readonly
Determine si le decompte du nombre de taches est fait de facon exacte ou non.
Class Method Summary collapse
-
.future(expr = nil, sorte_de_thread = :THREAD, &block) ⇒ PRubyFuture
Cree un future a partir d'une expression a evaluer, representee soit par un argument explicite de type Proc (lambda), soit par un bloc.
-
.pcall(*args) ⇒ void
Effectue un appel parallele a une serie de lambdas.
-
.thread_index ⇒ Fixnum
Retourne l'index du thread lorsque ce thread a ete cree dans un peach/peach_index/pmap/preduce.
Class Attribute Details
.nb_tasks_created ⇒ Fixnum (readonly)
Le nombre de taches creees n’est pas exacte, a moins qu’un appel ne soit fait au prealable a la methode with_exact_nb_tasks.
Justification: Pour avoir le nombre exact de taches, il faut utiliser un verrou (ou une variable atomique) ce qui ajoute des conflits d’acces inutiles. Donc, a n’utiliser que de facon exceptionnelle, car le verrou utilise est un verrou non-reentrant donc le meme thread peut vouloir l’obtenir a nouveau, ce qui genere une erreur.
Nombre de taches creees lors de l'execution de pcall, future ou version dynamique de peach, peach_index, pmap ou preduce.
74 75 76 |
# File 'lib/pruby/pruby.rb', line 74 def nb_tasks_created @nb_tasks_created end |
.nb_threads ⇒ Fixnum
Nombre de threads a utiliser par defaut pour l'execution de peach, peach_index, pmap, preduce.
38 39 40 |
# File 'lib/pruby/pruby.rb', line 38 def nb_threads @nb_threads end |
.nb_threads_used ⇒ Fixnum
Nombre de threads effectivement utilises pour l'execution de peach, peach_index, pmap, preduce.
56 57 58 |
# File 'lib/pruby/pruby.rb', line 56 def nb_threads_used @nb_threads_used end |
.thread_kind=(value) ⇒ :THREAD, :FORK_JOIN_TASK (writeonly)
Indique la sorte de threads desire pour l'execution d'un pcall. Si :THREAD alors ce sont des Thread JRuby. Si :FORK_JOIN_TASK alors ce sont des threads encore plus legers de la bibliotheque forkjoin.
104 105 106 107 108 |
# File 'lib/pruby/pruby.rb', line 104 def thread_kind=( sorte ) DBC.check_value( sorte, @methodes_de_thread.keys ) @thread_kind = sorte end |
.with_exact_nb_tasks=(value) ⇒ Bool (writeonly)
Assure que le decompte du nombre de tache soit fait de facon exacte. Voir nb_tasks_created.
92 93 94 |
# File 'lib/pruby/pruby.rb', line 92 def with_exact_nb_tasks=( b ) @with_exact_nb_tasks = b end |
.with_exact_nb_tasks? ⇒ Bool (readonly)
Determine si le decompte du nombre de taches est fait de facon exacte ou non. Voir nb_tasks_created.
82 83 84 |
# File 'lib/pruby/pruby.rb', line 82 def with_exact_nb_tasks? @with_exact_nb_tasks end |
Class Method Details
.future(expr = nil, sorte_de_thread = :THREAD, &block) ⇒ PRubyFuture
Cree un future a partir d'une expression a evaluer, representee soit par un argument explicite de type Proc (lambda), soit par un bloc.
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
# File 'lib/pruby/pruby.rb', line 178 def self.future( expr = nil, sorte_de_thread = :THREAD, &block ) DBC.require expr.nil? != !block_given?, "*** Dans future, il faut fournir soit un bloc, soit un lambda" DBC.require( expr.class == Proc, "*** L'argument fourni au future doit etre un Proc" ) if expr incr_nb_tasks_created 1 case sorte_de_thread when :FORK_JOIN_TASK @pool.submit PRubyFuture.new( expr || block ) when :THREAD if block_given? Thread.new( &block ) else Thread.new { expr.call } end else DBC.check_value( sorte_de_thread, @methods_de_thread.keys, "*** sorte_de_thread invalide" ) end end |
.pcall(*args) ⇒ void
This method returns an undefined value.
Effectue un appel parallele a une serie de lambdas. On peut specifier soit uniquement des Proc (lambdas), soit un ou plusieurs Range suivi d'un Proc. Si un Range est present, alors on va creer autant de threads que d'elements dans le Range et chaque Proc recevra en argument l'element du Range.
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/pruby/pruby.rb', line 141 def self.pcall( *args ) # On permet des Range, mais seulement au debut: # pcall [Range, Proc,]* Proc* DBC::assert args.size > 1, "*** Un appel a pcall devrait contenir au moins deux elements, sinon aucun interet!" thread_kind = @thread_kind if args[0].class == Symbol DBC.check_value( args[0], @methodes_de_thread.keys ) thread_kind = args.shift DBC::assert args.size > 1, "*** Un appel a pcall devrait contenir au moins deux elements, sinon aucun interet!" end while args[0].class == Range range = args.shift le_lambda = args.shift DBC.require le_lambda.arity == 1, "*** Le lambda qui suit un range dans un pcall doit recevoir un argument" args.push( *generate_lambdas( range, le_lambda ) ) end DBC.require args.all? { |a| a.class == Proc }, "*** Tous les autres arguments de pcall doivent etre des Procs (lambdas)" method = @methodes_de_thread[thread_kind] send method, *args end |
.thread_index ⇒ Fixnum
Retourne l'index du thread lorsque ce thread a ete cree dans un peach/peach_index/pmap/preduce.
119 120 121 |
# File 'lib/pruby/pruby.rb', line 119 def thread_index Thread.current[:thread_index] end |