我开始学习SimPy DES框架。我想实现一个模拟,其中请求在不同时间到达服务器。有不同类型的请求,每个请求都会加载具有特定内存/ CPU负载的服务器。因此,例如,可能会有通常使用10%CPU和100MB内存的请求,而其他请求可能需要15%的CPU和150MB的RAM(这些只是示例数字)。服务器有自己的特性和一些内存。如果请求到达服务器并且没有准备好所需的资源量,则此请求应该等待。我知道如何处理单个资源的情况 - 我可以使用容量为100且初始量为100的Container类实现CPU负载,类似于mememory。但是,如何实现我的请求应该等待CPU和内存可用的情况?
提前致谢!
答案 0 :(得分:1)
最简单的解决方案是使用AllOf
条件事件,如下所示:
cpu_req = cpu.get(15) # Request 15% CPU capactiy
mem_req = mem.get(10) # Request 10 memories
yield cpu_req & mem_req # Wait until we have cpu time and memory
yield env.timeout(10) # Use resources for 10 time units
这会导致您的进程等待,直到两个请求事件都被触发。但是,如果cpu在t = 5时可用,而内存在t = 20,则CPU将在整个时间内被阻塞(从实际使用CPU的时间的5-20倍)。
这可能适合你吗?