Ractor lets Ruby run code truly at the same time on multiple CPU cores. This helps programs run faster by doing many things together.
Ractor for true parallelism in Ruby
ractor = Ractor.new do # code to run in parallel result = some_work Ractor.yield(result) # send result back end value = ractor.take # get result from ractor
Ractor.new creates a new parallel task.
Use Ractor.yield to send data back from inside the ractor.
ractor = Ractor.new do 5 * 5 end result = ractor.take puts result
ractor = Ractor.new do sum = 0 (1..10).each { |n| sum += n } sum end puts ractor.take
ractor = Ractor.new do Ractor.yield("Hello from ractor") end message = ractor.take puts message
This program shows how to use a ractor to calculate squares of numbers from 1 to 5 in parallel. The main program prints messages before and after getting the result.
puts "Main program starts" # Create a ractor to calculate squares of numbers square_ractor = Ractor.new do squares = [] (1..5).each do |number| squares << number * number end squares end # Main program continues while ractor works puts "Doing other work in main thread..." # Get result from ractor result = square_ractor.take puts "Squares calculated in ractor: #{result}" puts "Main program ends"
Time complexity depends on the task inside the ractor, but using ractors can speed up multi-core processing.
Space complexity includes the memory used by the ractor and its data.
Common mistake: Trying to share mutable objects between ractors causes errors. Use message passing instead.
Use ractors when you need true parallelism. For simple concurrency, threads might be enough.
Ractors let Ruby run code truly in parallel on multiple CPU cores.
Use Ractor.new to create a parallel task and Ractor.yield or take to communicate.
Ractors help speed up programs by doing work at the same time safely.