프로 액티브

ProActive
ProActive 병행 스위트
개발자ActiveEon, Inria, OW2 컨소시엄
안정된 릴리스
10.0 (F-Zero) / 2019년 7월 12일, 2년 전(2019-07-12)
기입처자바
운영 체제크로스 플랫폼
유형작업 스케줄러
면허증.AGPL
웹 사이트www.activeeon.com

ProActive Parallel Suite는 OW2 커뮤니티의 일부인 엔터프라이즈 워크로드 조정을 위한 오픈 소스 소프트웨어입니다.워크플로 모델을 사용하면 모든 언어로 작성된 실행 파일 또는 스크립트 세트를 종속성과 함께 정의할 수 있으므로 ProActive Parallel Suite는 계산 리소스 사용을 최적화하면서 실행을 예약 및 조정할 수 있습니다.

ProActive Parallel Suite는 "액티브 객체" 설계 패턴(액티브 객체 참조)에 기반하여 작업 분산과 폴트 톨러런스를 최적화합니다.

ProActive Parallel Suite의 주요 기능

  • 워크플로우는 작업 병렬화(Java, 스크립트 또는 네이티브 실행 파일)를 용이하게 하여 다양한 제약 조건(GPU 가속, 라이브러리 또는 데이터 인접성 등)에 맞는 리소스에서 실행합니다.
  • 웹 인터페이스는 작업 워크플로우를 설계 및 실행하고 컴퓨팅 리소스를 관리하기 위해 제공됩니다.RESTful API는 엔터프라이즈애플리케이션과의 상호 운용성을 제공합니다.
  • 컴퓨팅 리소스(클라우드, 클러스터, 가상화 인프라스트럭처, 데스크톱 머신)를 단일 가상 인프라스트럭처로 통합할 수 있습니다.자동 확장 기능과 간편한 리소스 관리 전략을 제공합니다.
  • 상호 운용성은 이기종 워크플로우를 통해 제공됩니다.이 워크플로우에서는 Windows, Mac 및 Linux를 포함한 다양한 플랫폼에서 작업을 실행할 수 있습니다.

ProActive Java 프레임워크 및 프로그래밍 모델

이 모델은 니스 소피아 안티폴리스 [1]대학의 데니스 카로멜 교수가 만들었다.이후 INRIA의 [2]OASIS 팀원들이 모델을 몇 개 확장했습니다.A Theory of Distributed Objects는 ProActive 기능을 공식화하고, ProActive 프로그램 [3]실행의 특성과 함께 미적분에 공식적인 의미를 제공하는 ASP 미적분을 제시한다.

액티브 오브젝트

액티브 오브젝트는 ProActive를 사용한 동시 어플리케이션 구축에 사용되는 액티비티 및 배포의 기본 단위입니다.활성 개체는 자체 스레드와 함께 실행됩니다.이 스레드는 다른 액티브오브젝트에 의해 이 액티브오브젝트에서 호출된 메서드 및 이 액티브오브젝트에 속하는 서브시스템의 패시브오브젝트 메서드만 실행합니다.ProActive를 사용하면 표준 Java와 달리 프로그래머는 스레드 개체를 명시적으로 조작할 필요가 없습니다.

계산과 관련된 모든 호스트에 활성 개체를 생성할 수 있습니다.액티브 오브젝트가 생성되면 액티비티(그 자신의 스레드와 함께 실행된다는 사실)와 그 위치(로컬 또는 리모트)는 완전히 투과적입니다.액티브 오브젝트는 같은 클래스의 패시브인스턴스인 것처럼 조작할 수 있습니다.

액티브 오브젝트는 본문과 표준 Java 오브젝트의 2개의 오브젝트로 구성됩니다.활성 개체 외부에서 본문을 볼 수 없습니다.

본체는 액티브오브젝트에서 콜(또는 요구)을 수신하여 보류 중인 콜의 큐에 저장합니다.이러한 콜은 동기화 정책에 의해 지정된 순서로 실행됩니다.동기 정책이 지정되어 있지 않은 경우, 콜은 「선입선출」(FIFO) 방식으로 관리됩니다.

그런 다음 활성 개체의 스레드는 보류 중인 요청 대기열에서 메서드를 선택하고 실행합니다.액티브 객체 내부에는 병렬 처리가 제공되지 않습니다.이것은 ProActive 설계에서 중요한 결정이며, "사전" 조건과 클래스 불변수를 사용할 수 있습니다.

액티브 오브젝트에 콜을 송신하는 서브시스템 측에서는 액티브오브젝트가 프록시에 의해 표시됩니다.프록시는 미래 값을 나타내기 위해 미래 개체를 생성하고 콜을 Request 개체로 변환하여(메타 개체의 경우 이것은 리플리케이션입니다), 파라미터로 전달된 패시브 개체의 딥 복사를 수행합니다.

액티브 오브젝트 베이스

ProActive는 에펠 프로그래밍 언어의 병렬 확장 버전인 Effel//에 의해 도입된 모델의 애플리케이션을 개발하기 위해 설계된 라이브러리입니다.

이 모델에서는 어플리케이션이 서브시스템으로 구성되어 있습니다.각 서브시스템에 1개의 액티브오브젝트(따라서 스레드)와 각 액티브오브젝트(또는 스레드)에 1개의 서브시스템이 있습니다.따라서 각 서브시스템은 1개의 액티브오브젝트와 임의의 수의 패시브오브젝트로 구성됩니다.패시브오브젝트는 없을 수 있습니다.1개의 서브시스템의 스레드는 이 서브시스템의 오브젝트에서 메서드만 실행합니다.서브시스템간에 「공유 패시브 오브젝트」는 없습니다.

이러한 기능은 응용 프로그램의 토폴로지에 영향을 미칩니다.서브시스템을 구성하는 모든 오브젝트(액티브오브젝트와 패시브오브젝트) 중 액티브오브젝트만이 서브시스템 외부에 있는 오브젝트에 인식됩니다.모든 개체(액티브 및 패시브)는 활성 개체에 대한 참조를 가질 수 있습니다.오브젝트 o1이 패시브 오브젝트 o2에 대한 참조가 있는 경우 o1o2는 동일한 서브시스템의 일부입니다.

모델:시퀀셜, 멀티스레드, 분산

이는 서브시스템 간의 메시지 전달 의미에도 영향을 미칩니다.서브시스템 내의 객체가 액티브한 객체에 메서드를 호출할 때 콜의 파라미터는 서브시스템의 패시브 객체에 대한 참조가 될 수 있으며 이로 인해 공유 패시브 객체가 됩니다.그렇기 때문에 액티브오브젝트의 콜 파라미터로 전달된 패시브오브젝트는 항상 딥카피로 전달됩니다.반면 활성 개체는 항상 참조에 의해 전달됩니다.이는 대칭적으로 활성 개체에서 호출된 메서드에서 반환된 개체에도 적용됩니다.

비동기 호출, 미래 및 데이터 공유가 없는 개념 덕분에 ProActive로 작성된 애플리케이션은 순차적 환경, 멀티 스레드 환경 또는 분산 환경에서 실행되더라도 구조 변경이 필요하지 않습니다. 실제로는 거의 필요하지 않습니다.

비동기 콜 및 미래

가능한 한 액티브 오브젝트에 대한 메서드콜은 비동기 요구로 재생성됩니다.가능하지 않은 경우 콜은 동기화되어 응답이 수신될 때까지 차단됩니다.요구가 비동기일 경우 미래 객체를 즉시 반환합니다.

미래 개체는 아직 수행되지 않은 메서드 호출 결과의 자리 표시자 역할을 합니다.그 결과 반환된 오브젝트에서 메서드를 호출할 필요가 없는 한 호출 스레드는 코드를 계속 실행할 수 있습니다.필요에 따라 메서드 호출 결과를 아직 사용할 수 없는 경우 호출 스레드는 자동으로 차단됩니다.미래 객체는 활성 객체의 구조와 유사하지만 미래 객체는 활성화되지 않습니다.스텁과 프록시만 있습니다.

코드 예시

다음 코드 발췌는 미래 객체의 개념을 강조합니다.사용자가 메서드를 호출한다고 가정합니다.foo및 방법bar액티브 오브젝트로부터a; 그foo메서드는 void를 반환하고barmethod는 클래스의 개체를 반환합니다.V:

// (리모트) AO를 향한 단방향 비동기 통신 // 요구가 에 송신됩니다. a.후우 (PARAM.);  // 결과가 포함된 형식 비동기 통신입니다. // v는 먼저 대기 중인 미래로, 다음 시간 이후에 투명하게 채워집니다. // 요청 서비스 및 응답 V v = a.막대기 (PARAM.); ... // 비동기 호출 결과 사용. // v가 아직 대기 중인 미래일 경우 자동 트리거 //잠깐만요:필요에 따라 대기 v. (PARAM.); 

언제foo활성 개체에서 호출됩니다.a(현재 스레드는 다른 서브시스템에서 메서드를 실행할 수 없기 때문에) 즉시 반환됩니다.마찬가지로,bar에 요구됩니다.a즉시 반환되지만 결과는v아직 계산할 수 없습니다.메서드 호출 결과의 자리 표시자인 미래 개체가 반환됩니다.발신자 서브시스템의 관점에서는 미래의 오브젝트와 패시브오브젝트에 동일한 콜이 발행되었을 경우 반환되는 오브젝트 사이에는 차이가 없습니다.

양쪽 메서드가 반환된 후 콜이 효과적으로 실행된 것처럼 호출 스레드는 코드를 계속 실행합니다.미래 메커니즘의 역할은 발신자 스레드를 차단하는 것입니다.gee메서드가 호출됩니다.v결과는 아직 설정되지 않았습니다.이 오브젝트 간 동기화 정책은 wait-by-param으로 알려져 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Caromel, Denis (September 1993). "Towards a Method of Object-Oriented Concurrent Programming". Communications of the ACM. 36 (9): 90–102. doi:10.1145/162685.162711.
  2. ^ Baduel, Laurent; Baude, Françoise; Caromel, Denis; Contes, Arnaud; Huet, Fabrice; Morel, Matthieu; Quilici, Romain (January 2006). Cunha, José C.; Rana, Omer F. (eds.). Programming, Composing, Deploying for the Grid (PDF). Grid Computing: Software Environments and Tools (PDF). Sprinter-Verlag. pp. 205–229. CiteSeerX 10.1.1.58.7806. doi:10.1007/1-84628-339-6_9. ISBN 978-1-85233-998-2. CiteSeerX: 10.1.1.58.7806.
  3. ^ Caromel, Denis; Henrio, Ludovic (2005). A Theory of Distributed Objects: asynchrony, mobility, groups, components. Berlin: Springer. ISBN 978-3-540-20866-2. LCCN 2005923024.

추가 정보

외부 링크