다중 스레드 응용 프로그램의 UML 다이어그램


25

단일 스레드 응용 프로그램의 경우 클래스 다이어그램을 사용하여 해당 응용 프로그램의 아키텍처 개요를 얻고 싶습니다. 그러나이 유형의 다이어그램은 예를 들어 다른 스레드에서 "라이브"클래스의 다른 인스턴스 (인스턴스 액세스가 하나의 인스턴스에서만 저장 됨)로 인해 다중 스레드 / 동시 응용 프로그램을 이해하려고 할 때 크게 도움이되지 않았습니다. 그것이 사는 스레드). 따라서 클래스 간의 연결이 반드시 해당 객체에서 메서드를 호출 할 수있는 것은 아니지만 대신 대상 객체의 스레드에서 해당 호출을 수행해야합니다.

Hassan Gomaa의 UML을 사용 하여 동시, 분산 및 실시간 응용 프로그램 설계 와 같은 주제에 대해 찾은 대부분의 문헌에는 스레드 경계를 객체 다이어그램에 그리는 것과 같은 멋진 아이디어가 있었지만 전반적으로 너무 학문적이고 장황한 것처럼 보였습니다. 정말 유용합니다.

이 다이어그램을 문제 영역에 대한 높은 수준의 관점으로 사용하고 싶지 않고 클래스 / 객체에 대한 자세한 설명, 상호 작용 및 위에서 언급 한 스레드 경계로 인한 제한 사항으로 사용하고 싶습니다.

그러므로 알고 싶습니다 :

  1. 멀티 스레드 응용 프로그램을 이해하는 데 가장 도움이되는 다이어그램 유형은 무엇입니까?
  2. 멀티 스레드 응용 프로그램의 특성을 고려하여 클래식 UML에 대한 확장 기능이 있습니까 (예 :
    • 어떤 개체는 특정 스레드에있을 수 있지만 다른 개체에는 스레드 선호도가 없습니다.
    • 객체의 일부 필드는 모든 스레드에서 읽을 수 있지만 하나의 스레드에서만 쓸 수 있습니다.
    • 일부 메소드는 동기식이며 결과를 리턴하는 반면, 다른 메소드는 비동기식으로 요청을 대기시키고 예를 들어 다른 스레드의 콜백을 통해 결과를 리턴하는 비동기식입니다.

2
필자는 개인적으로 동시 사용 사례 / 프로세스를 모델링하는 데 유용한 활동 다이어그램을 개인적으로 발견했지만 클래스 / 객체 수준으로 낮추려면 실제로 적합하지 않습니다.
Péter Török

답변:


12

스레드 실행이 발생하는 방식에 대한 가장 중요한 통찰력은 시퀀스 다이어그램이라고 합니다. 다음은 Wikipedia 의 예입니다.

여기에 이미지 설명을 입력하십시오

이 다이어그램은 기본적으로 lifeline 이라고하는 수직 단일 행의 방향과 함께 이벤트 목록을 그립니다 . 이 경우 각 스레드는 자체 라이프 라인의 소유자입니다. 이 다이어그램은 동기식, 비동기식 등과 같은 모든 유형의 이벤트를 표시 할 수 있습니다.

그러한 시스템에서 다른 가장 중요한 것은 상태 차트 또는 상태 다이어그램입니다. 일반적으로 이는 모델이 상태 머신으로 표시되는 경우에만 적용됩니다. 그러나 대부분의 다중 스레드 시스템 (스레드가 중요하지 않은 시스템)에서는 서로 다른 상태에 대해 격리 된 알고리즘으로 작동하도록 설계하는 것이 가장 좋습니다.

상호 작용 다이어그램통신 다이어그램 과 같은 다른 다이어그램 유형이 있지만 시퀀스 다이어그램상태 다이어그램 을 그리는 것이 최대한 명확해질 것이라고 생각 합니다.


6

내 대답은 UML 시퀀스 다이어그램과 관련되어 있다는 점에서 Dipan을 보완합니다 . 100 % 순수한 UML이 아닌 스타일도 괜찮습니다. 동시성 패턴에 사용 된 다이어그램을 살펴보십시오 . 일부는 거의 UML과 비슷하지만 표준은 아닙니다.

여기에 이미지 설명을 입력하십시오

Java 스레드 동기화의 대기 / 알림에 익숙한 경우 언급 한 문서에서 다음 시퀀스 다이어그램에 대해 감사하겠습니다.

여기에 이미지 설명을 입력하십시오


이것은 .NET / C #에도 적용 가능하며 Visual Studio에는 멀티 스레드 동작을 설명하기위한 제어 흐름 조각 유형을 포함한 UML 시퀀스 다이어그램 기본 제공 도구가 있습니다. 참조 msdn.microsoft.com/en-us/library/dd465153.aspx#Anchor_1
데이비드 버크

0

동일한 클래스를 사용하는 다중 스레드 응용 프로그램의 경우 동일한 클래스를 스레드를 나타내는 각 모델로 끌어서 놓는 것이 좋습니다. 클래스, 다이어그램 또는 코드를 클릭하여 다른 뷰를 가진 동일한 클래스를 가질 수 있으며 모델 및 코드를 탐색 할 수 있습니다. 모델 병합은 잘 알려진 개념은 아니지만 Omondo를 사용하는 Eclipse에서 실제로 잘 작동한다는 것을 알고 있습니다.

두 개 이상의 프로젝트로 구성된 큰 응용 프로그램을 모델링 할 때 의미합니다. 각 프로젝트에 대한 모델을 만든 다음 더 큰 프로젝트에 병합합니다. 모든 모델링은 클래스 다이어그램을 사용하여 수행되는데, 이는 전체 코드를 Java 코드에서 UML로 되돌릴 때 얻은 모델입니다. 내 예에서는 기존 코드를 사용하여 단일 UML 모델로 뒤집은 다음 UML 모델을 만든이 모든 역방향 코드를 하나의 큰 모델로 병합합니다. 기존 코드를 뒤집지 않고 여러 모델을 만들 수도 있습니다. 코드없이 생성하거나 기존 코드로 리버스 엔지니어링 단계에서 두 가지 방식으로 작동합니다.

그것이 의미가 있는지는 모르겠지만 멀티 프로젝트 모델링으로하는 것처럼 각 스레드마다 하위 모델을 다시 그룹화하여 하나의 큰 모델을 만들 수 있습니까? 이 도움을 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.