Closed
Description
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.