Tools/IBM Rhapsody
Rhapsody :: Reactive 클래스의 Sequential과 Active 동작의 차이점
ppiazi
2010. 4. 17. 19:11
Rhapsody에서 Reactive 클래스의(클래스에 State Chart를 추가하면 Reactive 클래스가 된다.) Sequential과 Active의 동작을 확인하기 위하여 아래의 시나리오대로 동작하는 프로그램을 간단히 만든다.
위의 시나리오대로 구동하기 위한 Consumer의 State Chart는 아래와 같다.
상황 1. Producer/Consumer를 sequential로 하여 구동
클래스 다이어그램
(sequential 클래스들은 테두리 두께가 동일하다.)
결과화면1
결과화면2
상황 2. Producer/Consumer를 active로 하여 구동
클래스 다이어그램
(active 클래스들은 양옆 테두리가 더 두껍다.)
결과화면1
결과화면2
해석 결과
State Chart를 가지는 클래스가 Sequential로 지정이 되어있다면, 원하는 Task의 Event Loop에서 받을 수 있도록 지정할 수 있다. 객체를 생성시 인자에 해당 Task를 넣으면 된다. 반면 Active로 지정이 되어있다면 자기자신의 Event Loop를 가지고 Event를 받아처리할 것이다. Sequential일 경우와 Active일 경우의 각 클래스의 생성자의 차이는 아래와 같다.
Sequential의 경우
Active의 경우
만약 Sequential의 경우 Event Loop가 지정되지 않으면 Main Thread의 Event Loop를 사용하게 될 것이다.
상황1의 경우 Producer와 Consumer가 동일하게 Main Thread의 Event Loop를 사용하였으므로, Consumer가 2 s동안 일을 처리할 동안에도 Producer는 원하는 동작을 수행할 수가 없었던 것이다.
클래스 feature에 있는 Concurrency는 이와 같은 의미를 지닌다.
- Producer 1개와 Consumer 1개를 생성한다.
- Producer는 500 ms 마다 메시지를 Consumer에게 전달한다.
- Consumer는 전달받은 메시지 처리하는데 2 s의 시간을 허비한다.
- Producer는 20개의 메시지를 Consumer에게 던지고 종료한다.
위의 시나리오대로 구동하기 위한 Consumer의 State Chart는 아래와 같다.
상황 1. Producer/Consumer를 sequential로 하여 구동
클래스 다이어그램
(sequential 클래스들은 테두리 두께가 동일하다.)
결과화면1
결과화면2
상황 2. Producer/Consumer를 active로 하여 구동
클래스 다이어그램
(active 클래스들은 양옆 테두리가 더 두껍다.)
결과화면1
결과화면2
해석 결과
State Chart를 가지는 클래스가 Sequential로 지정이 되어있다면, 원하는 Task의 Event Loop에서 받을 수 있도록 지정할 수 있다. 객체를 생성시 인자에 해당 Task를 넣으면 된다. 반면 Active로 지정이 되어있다면 자기자신의 Event Loop를 가지고 Event를 받아처리할 것이다. Sequential일 경우와 Active일 경우의 각 클래스의 생성자의 차이는 아래와 같다.
Sequential의 경우
CClass::CClass(IOxfActive* theActiveContext) {
setActiveContext(theActiveContext, true);
initStatechart();
}
setActiveContext(theActiveContext, true);
initStatechart();
}
Active의 경우
CClass::CClass(IOxfActive* theActiveContext) {
setActiveContext(this, true);
initStatechart();
}
setActiveContext(this, true);
initStatechart();
}
만약 Sequential의 경우 Event Loop가 지정되지 않으면 Main Thread의 Event Loop를 사용하게 될 것이다.
상황1의 경우 Producer와 Consumer가 동일하게 Main Thread의 Event Loop를 사용하였으므로, Consumer가 2 s동안 일을 처리할 동안에도 Producer는 원하는 동작을 수행할 수가 없었던 것이다.
클래스 feature에 있는 Concurrency는 이와 같은 의미를 지닌다.