Skip to content

Prevent preempted arrivals exceed queue size #59

Closed
@nacnudus

Description

@nacnudus

In the following system with a zero-length queue, the first arrival is preempted, waits in the zero-length queue for service, and is eventually served.

library(simmer)
p0 <- 
  create_trajectory("Low-priority trajectory") %>%
  seize("Finite queue server", priority = 0, preemptible = 0) %>%
  timeout(10) %>%
  release("Finite queue server")
p1 <- 
  create_trajectory("High-priority trajectory") %>%
  seize("Finite queue server", priority = 1, preemptible = 1) %>%
  timeout(10) %>%
  release("Finite queue server")
env <- 
  simmer() %>%
  add_generator("Low-priority arrival ", p0, at(0, 2)) %>%
  add_generator("High-priority arrival ", p1, at(1)) %>%
  add_resource("Finite queue server", queue_size = 0, preemptive = TRUE) %>%
  run()
env %>% get_mon_arrivals
#>                      name start_time end_time activity_time finished
#> 1  Low-priority arrival 1          2        2             0    FALSE
#> 2  Low-priority arrival 0          0       20            10     TRUE
#> 3 High-priority arrival 0          1       11            10     TRUE
#>   replication
#> 1           1
#> 2           1
#> 3           1
#>                      name start_time end_time activity_time finished
#> 1  Low-priority arrival 1          2        2             0    FALSE
#> 2  Low-priority arrival 0          0       20            10     TRUE
#> 3 High-priority arrival 0          1       11            10     TRUE
#>   replication
#> 1           1
#> 2           1
#> 3           1
env %>% get_mon_resources
#>   time server queue system            resource replication
#> 1    0      1     0      1 Finite queue server           1
#> 2    1      1     1      2 Finite queue server           1
#> 3   11      1     0      1 Finite queue server           1
#> 4   20      0     0      0 Finite queue server           1
#>   time server queue system            resource replication
#> 1    0      1     0      1 Finite queue server           1
#> 2    1      1     1      2 Finite queue server           1
#> 3   11      1     0      1 Finite queue server           1
#> 4   20      0     0      0 Finite queue server           1

I guess any solution to this would imply some kind of FIFO/LIFO preemption policy on the queue, not necessarily the same as that on the server.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions