module Greedy
Allows tasks to cluster within windows for high-throughput scenarios.
Greedy strategies permit multiple tasks to start immediately as long as the window limit hasn't been exceeded. This creates "bursts" of activity at window boundaries, maximizing throughput when resources become available.
Greedy Behavior
Greedy behavior with 3 tasks per 10-second window:
Window 1: [Task1, Task2, Task3] at 0s -------- (all immediate) Window 2: [Task4, Task5, Task6] at 10s ------- (all immediate)
Perfect for: Batch processing, high-throughput scenarios
Definitions
def self.can_acquire?(window_count, limit, frame_changed)
Check if a task can be acquired in burstable mode.
Signature
-
parameter
window_countInteger Number of tasks started in current window.
-
parameter
limitInteger Maximum tasks allowed in the window.
-
parameter
frame_changedBoolean Ignored in burstable mode.
-
returns
Boolean True if under the window limit.
Implementation
def self.can_acquire?(window_count, limit, frame_changed)
window_count < limit
end
def self.next_acquire_time(window_start_time, window_duration, frame_start_time, frame_duration)
Calculate the next time a task can be acquired.
Signature
-
parameter
window_start_timeNumeric When the current window started.
-
parameter
window_durationNumeric Duration of the window.
-
parameter
frame_start_timeNumeric Ignored in burstable mode.
-
parameter
frame_durationNumeric Ignored in burstable mode.
-
returns
Numeric The next window start time.
Implementation
def self.next_acquire_time(window_start_time, window_duration, frame_start_time, frame_duration)
window_start_time + window_duration
end
def self.window_blocking?(window_count, limit, window_changed)
Check if window constraints are blocking new tasks.
Signature
-
parameter
window_countInteger Number of tasks started in current window.
-
parameter
limitInteger Maximum tasks allowed in the window.
-
parameter
window_changedBoolean Whether the window has reset.
-
returns
Boolean True if window is blocking new tasks.
Implementation
def self.window_blocking?(window_count, limit, window_changed)
return false if window_changed
window_count >= limit
end
def self.frame_blocking?(frame_changed)
Check if frame constraints are blocking new tasks.
Signature
-
parameter
frame_changedBoolean Whether the frame boundary has been crossed.
-
returns
Boolean Always false for burstable mode.
Implementation
def self.frame_blocking?(frame_changed)
false # Burstable mode doesn't use frame blocking
end
def self.statistics
Get current burst strategy statistics.
Signature
-
returns
Hash Statistics hash with current state.
Implementation
def self.statistics
{
name: "Greedy",
}
end