Files
Yukihiro "Matz" Matsumoto 2a124a704f mruby-task: add comprehensive examples demonstrating task features
added six new examples:
- simple.rb: basic task creation and execution
- priority.rb: priority-based scheduling
- suspend_resume.rb: manual task control
- inspection.rb: task status and inspection methods
- statistics.rb: scheduler monitoring with Task.stat
- producer_consumer.rb: task coordination pattern

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-10 17:44:31 +09:00

60 lines
1.2 KiB
Ruby

# Task Statistics Example
# Demonstrates Task.stat for monitoring scheduler state
def print_stats(label)
stat = Task.stat
puts "\n#{label}"
puts " Tick: #{stat[:tick]}, Next wakeup: #{stat[:wakeup_tick]}"
puts " Ready: #{stat[:ready][:count]} tasks"
puts " Waiting: #{stat[:waiting][:count]} tasks"
puts " Suspended: #{stat[:suspended][:count]} tasks"
puts " Dormant: #{stat[:dormant][:count]} tasks"
end
puts "=== Task Statistics Demo ==="
print_stats("Initial state:")
# Create several tasks
workers = []
5.times do |i|
workers << Task.new(name: "worker-#{i}") do
sleep 0.5
puts "Worker #{i} completed"
end
end
print_stats("After creating 5 tasks:")
# Create a monitor task
monitor = Task.new(name: "monitor") do
sleep 0.1
print_stats("Monitor: After 0.1s:")
# Suspend a couple tasks
workers[2].suspend
workers[3].suspend
print_stats("Monitor: After suspending 2 tasks:")
sleep 0.5
print_stats("Monitor: After 0.5s more:")
# Resume suspended tasks
workers[2].resume
workers[3].resume
print_stats("Monitor: After resuming tasks:")
# Wait for all workers
workers.each(&:join)
end
# Run the scheduler
Task.run
print_stats("Final state:")
puts "\n=== Demo complete ==="