# Requires Julia >= 1 and SimJulia >= 0.7 JuliaCall::julia_setup() JuliaCall::julia_install_package_if_needed("ResumableFunctions") JuliaCall::julia_install_package_if_needed("SimJulia") JuliaCall::julia_install_package_if_needed("Distributions") tmp <- tempfile(); write(" using ResumableFunctions, SimJulia, Distributions @resumable function exp_source(sim::Simulation, lambd::Float64, server::Resource, mu::Float64) while true dt = rand(Exponential(1 / lambd)) @yield timeout(sim, dt) @process customer(sim, server, mu) end end @resumable function customer(sim::Simulation, server::Resource, mu::Float64) @yield request(server) dt = rand(Exponential(1 / mu)) @yield timeout(sim, dt) @yield release(server) end function test_mm1(n::Float64) sim = Simulation() server = Resource(sim) @process exp_source(sim, 1.0, server, 1.1) run(sim, n) end function benchmark(n::Float64, times::Int) results = Float64[] test_mm1(n) for i = 1:times push!(results, @elapsed test_mm1(n)) end return(results) end ", file = tmp) JuliaCall::julia_source(tmp) # Note: if the CPU is very fast (i.e., > 3 GHz), n=1e5L may be needed instead n <- 1e4L times <- 20 JuliaCall::julia_call("benchmark", as.numeric(n), as.integer(times))