분산 에이전트 시스템이 전역 변수의 값을 수정, 상기 분산 은행 응용 프로그램을 고려 충돌 후 에이전트 프로그램을 다시 시작 "균형"이
그래서, 에이전트의 요청이 대기하고 말한다. 요청은 특정 에이전트를 대신하여 값이 전역 변수에 추가되는 형식입니다. 에이전트의 코드는 다음 분명히 요청을 다시 처리하지 말아야 포인트 B에 충돌, 그렇지 않으면 변수가 동일한 두 번 수정 될,
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
}
자 : 그래서, 에이전트에 대한 코드의 형식은 의뢰. 이를 방지하기 위해, 우리는 따라서 코드가 원자 수 :
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