考虑分布式行申请,其中分散剂机修改全局变量的值后:说“平衡”重新启动代理程序崩溃
因此,代理人的请求进行排队。请求的形式是将值代表特定代理添加到全局变量中。因此,对于该代理的代码的形式为:现在
agent
{
look_queue(); // take a look at the leftmost request on queue without dequeuing
lock_global_variable(balance,agent_machine_id);
///////////////////// **POINT A**
modify(balance,value);
unlock_global_variable(balance,agent_machine_id);
/////////////////// **POINT B**
dequeue(); // once transaction is complete, request can be dequeued
}
,如果代理的代码崩溃在B点,那么显然该请求不应该被再次处理,否则变量将两次相同的被修改请求。为了避免这种情况,我们可以使代码的原子,因此:
agent
{
look_queue(); // take a look at the leftmost request on queue without dequeuing
*atomic*
{
lock_global_variable(balance,agent_machine_id);
modify(balance,value);
unlock_global_variable(balance,agent_machine_id);
dequeue(); // once transaction is complete, request can be dequeued
}
}
我寻找这些问题的答案:
- 如何确定哪些需要“自动”被自动执行的代码点?
- 如果代码在执行过程中崩溃,“记录事务和变量值”有多大帮助?是否有其他方法来解决崩溃代理的问题?
- 此外,日志记录不能扩展到大量变量的大型应用程序。在这种情况下我们能做些什么 - 而不是从头开始重新执行?
- 一般来说,如果代理商一起工作,如何识别这样的原子块。如果一个代理失败了,其他人不得不等待它重新启动? 软件测试如何帮助我们识别潜在的情况,其中如果代理崩溃,则观察到不一致的程序状态。
- 如何让原子块更加细化,减少性能瓶颈?
感谢您的详细解答。我会阅读你建议的东西:) – user655617 2011-03-13 17:25:52