寻找资源管理/分配系统

时间:2010-01-05 06:47:35

标签: resources allocation

我需要的是一个系统我可以定义简单对象(例如,“服务器”,而不是“操作系统”和“版本”字段,以及其他元数据(IP,MAC地址等))。登记/> 我希望能够以安全的方式从系统请求对象,例如,如果我定义“服务器”,例如,可以由3个客户端同时使用,那么如果4个客户端同时请求服务器一个人必须等到服务器被释放 此外,我需要能够以某种查询样式执行请求,例如allocate(type=System, os='Linux', version=2.6)

语言并不重要,但Python是一个优势。

过去几天我一直在谷歌上搜索这样的东西而且什么都没有,也许这个系统的名字更好,我不知道。

有什么建议吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

并发应用程序中的资源限制 - 例如“最多3个客户端”示例 - 通常通过使用信号量(或更准确地说,计算信号量)来实现。

您通常使用一些“count”初始化信号量 - 这是对该资源的最大并发访问次数 - 并且每次客户端开始使用该资源时递减此计数器,并在客户端完成使用时递增它。信号量的实现保证了“增量”和“减量”操作将是原子的。

您可以阅读有关semaphores on Wikipedia的更多信息。我对Python不太熟悉,但我认为这两个链接可以提供帮助:

答案 1 :(得分:0)

对于Java,有一个非常好的标准库具有此功能:

http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html

只需使用信号量字段创建一个类:

 class Server {
   private static final MAX_AVAILABLE = 100;
   private final Semaphore available = new Semaphore(MAX_AVAILABLE, true);
   // ... put all other fields (OS, version) here...
   private Server () {}

   // add a factory method
   public static Server getServer() throws InterruptedException {
     available.acquire();
     //... do the rest here
   }

 }

修改:

如果您希望事物更“可配置”,请考虑使用AOP技术,即创建基于信号量的同步方面。

修改:

如果你想要完全独立的系统,我猜你可以尝试使用支持行级锁定作为信号量的任何现代数据库(例如PostgreSQL)系统。例如,为每个代表服务器创建3行,如果它们是空闲的,则选择锁定(例如“select * from server where is_used = 'N' for update”),将所选服务器标记为已使用,最后取消标记,提交事务。