Sha256: 8e1442edb0ca52d753d354c166f802cf6445e98e21a2753ec8d9bf0b394435b9

Contents?: true

Size: 1.75 KB

Versions: 4

Compression:

Stored size: 1.75 KB

Contents

# Require Gemfile gems
require_relative "../lib/asynchronous"

# you can use simple :c also instead of :concurrency
# remember :concurrency is all about GIL case, so
# you can modify the objects in memory
# This is ideal for little operations in simultaneously or
# when you need to update objects in the memory
calculation = async :concurrency do

  sleep 2
  4 * 2

end
puts "hello concurrency"

calculation.value += 1

puts calculation.value

#>--------------------------------------------------
# or you can use simple {} without sym and this will be by default a
# :concurrency pattern

calculation = async { sleep 3; 4 * 3 }

puts "hello simple concurrency"

calculation.value += 1

# remember you have to use .value to cal the return value from the code block!
puts calculation.value


#>--------------------------------------------------
# now let's see the Parallelism
# you can use simple :p also instead of :parallelism
# remember :parallelism is all about real OS thread case, so
# you CANT modify the objects in memory only copy on write modify
# This is ideal for big operations where you need do a big process
# and only get the return value so you can do big works without the fear of the
# Garbage collector slowness or the GIL lock
# when you need to update objects in the memory use :concurrency
calculation = async :parallelism do

  sleep 4
  4 * 5

end
puts "hello parallelism"

calculation.value += 1

puts calculation.value

#>--------------------------------------------------

# more complex way

puts "mixed usecase with arrays as return obj"
calc1 = async :parallelism do

  sleep 4
  # some big database processing brutal memory eater stuff
  [4*5,"hy"]

end

calc2 = async {
  [5+1,"sup!"]
}

puts calc1.value == calc2.value
puts (calc1.value+calc2.value).inspect

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
asynchronous-1.0.4 examples/async_patterns.rb
asynchronous-1.0.3 examples/async_patterns.rb
asynchronous-1.0.2 examples/async_patterns.rb
asynchronous-1.0.1 examples/async_patterns.rb