Module: DispatchQueue::Dispatch
- Defined in:
- lib/dispatch_queue_rb/dispatch.rb
Defined Under Namespace
Classes: Result
Class Method Summary collapse
- .concurrent_map(input_array, target_queue: nil, &task) ⇒ Object
- .default_queue ⇒ Object
- .main_queue ⇒ Object
- .ncpu ⇒ Object
- .synchronize ⇒ Object
Class Method Details
.concurrent_map(input_array, target_queue: nil, &task) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/dispatch_queue_rb/dispatch.rb', line 43 def concurrent_map( input_array, target_queue:nil, &task ) group = DispatchGroup.new target_queue ||= default_queue output_results = input_array.map do |e| result = Result.new target_queue.dispatch_async( group:group ) do result.value = task.call( e ) end result end group.wait() output_results.map { |result| result.value } end |
.default_queue ⇒ Object
20 21 22 |
# File 'lib/dispatch_queue_rb/dispatch.rb', line 20 def default_queue @@default_queue end |
.main_queue ⇒ Object
24 25 26 |
# File 'lib/dispatch_queue_rb/dispatch.rb', line 24 def main_queue @@main_queue end |
.ncpu ⇒ Object
16 17 18 |
# File 'lib/dispatch_queue_rb/dispatch.rb', line 16 def ncpu() @@ncpu ||= `sysctl -n hw.ncpu`.to_i rescue 1 end |
.synchronize ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/dispatch_queue_rb/dispatch.rb', line 28 def synchronize() mutex, condition = ConditionVariablePool.acquire() result = nil result_handler = Proc.new { |r| result = r; mutex.synchronize { condition.signal() } } mutex.synchronize do yield result_handler condition.wait( mutex ) end ConditionVariablePool.release( mutex, condition ) result end |