2010-07-28 3 views
65

Java (및 JVM 언어)에는 많은 다른 Actor model 구현이 있습니다.Java 용 액터 모델 라이브러리/프레임 워크는 무엇입니까?

많은 액터 라이브러리와 프레임 워크가 액터가 내장되어 있지 않은 자바에서 액터 스타일 프로그래밍을 허용하기 위해 구현되었습니다. 저는 Actor 모델이 큰 장점이 있다고 생각합니다. 그러나 Java에 대한 선택은 압도적입니다!

누군가 가장 인기있는 글을 게시하고 사용할 수있는 통찰력을 제공 할 수 있습니까? 초당 전달되는 메시지 측면에서 처리량에 대한 벤치마킹이있는 것은 어느 것입니까?

+3

대답 중 하나가 "배우"라는 점을 제외하고는 http://stackoverflow.com/questions/436050/events-in-java의 복제본을 보지 못했습니다. 첫 번째는 죽은 것입니다 (Kilim, Akka 또는 Jetlang에 대한 언급 없음). –

+0

"[java] 배우"로 검색하십시오. – oluies

+2

새로운 멋진 버전이 있습니다. https://github.com/RuedigerMoeller/kontraktor –

답변

60

This은 좋은 기사 시리즈입니다. 또한 this 프리젠 테이션을 참조하십시오. 칼 휴이트 (Carl Hewitt)는 계산의 액터 모델 here의 본질을 설명합니다.

KillimAkka (scala)의 성능이 가장 좋습니다. 나는 Akka를 사용하는 것이 좋습니다. Starting with Scala 2.11.0, 스칼라 액터스 라이브러리는 더 이상 사용되지 않습니다. 스칼라 2.10.0에서 기본 액터 라이브러리는 이미 Akka입니다. 프론트 엔드로 akka를 사용하고 스칼라에서 코딩을 모두하고 싶지 않다면 자바 코드를 호출하십시오. Scala와 Akka는 매우 훌륭한 구문과 API를 가지고 있습니다. Akka는 "Active Objects"라고하는 Java API를 가지고 있습니다. 코드베이스가 빠르게 움직이기 때문에 지금 Akka에는 많은 일이 일어나고 있습니다. Java getting started doc

Killim은 자바 기반이지만 컴파일 시간 짜기는 참조하십시오.

JetlangFunctionalJava 시간 직물 (? 확실)를 컴파일하지 않는 옵션입니다,하지만 빠른 Akka 및 Killim로하지 않습니다 (이 없음 현재 데이터,하지만 오래된 숫자는 Jonas Boners and Viktor Klangs talk at Scala Days 2010에있다).

기타 옵션은 일반 JMS (또는 다른 MQ/PubSub)를 사용하고 있습니다. 또한 내부 JVM 게시 채널/작업자 your own simple을 수행 할 수도 있습니다. 아니면 그냥 java util concurrent ExecutorService를 또는 배우 구현과 com.google.common.util.concurrent

다른 스칼라 기반의 프레임 워크/라이브러리를 사용 Stambecco, LiftScalaz 있습니다.

다른 유사한 모델은 Hazlecast Distributed Executor Service, InvocableService, GigaSpaces Executors 또는 IBM eXtreme Scale을 사용하는 Oracle Coherence입니다. 그러나 이것들은 어느 정도 "배우들은 시스템이다"부분을 놓치고있다.

+4

Akaka는 Java API (Active Objects)를 가지고 있습니다. –

+1

Reactor와 RxJava를 추가하십시오. –

+2

참고 Vert.x –

1

스칼라 액터가 최선의 제안입니다.

간단한 자습서는 http://www.scala-lang.org/node/242을 참조하십시오.

+0

자바에서 스칼라 액터를 사용할 수 있습니까? (나는 여전히 JVM을 사용하는 답을 고맙게 생각한다.) –

+2

스칼라는 100 % JVM 호환 언어이므로 자바에서 사용할 수있다. –

+1

"자바와 함께 사용하라"고해야한다고 생각합니다. 예를 들어 Scala에서 Java를 호출하고 Java에서 Scala를 호출하는 것은 쉽지 않습니다. 하지만 그것은 단지 다른 jar 파일입니다. http://blog.lostlake.org/index.php?/archives/73-For-all-you-know,-its-just-another-Java-library. html – oluies

9

"JVM 플랫폼 용 액터 프레임 워크 : 비교 분석"(JVM 플랫폼 액터 프레임 워크의 구문, 의미 및 성능 비교) 지난 해 발표 된 관련 연구를 수행했습니다. https://www.researchgate.net/profile/Gul_Agha/publication/221302944_Actor_frameworks_for_the_JVM_platform/links/55aeb2df08aed614b09a775c.pdf?origin=publication_detail에서 확인할 수 있습니다. 유용하다고 생각하길 바랍니다.

+1

이후 발생한 문제에 대해 의견을 보내주십시오. –

1

글쎄, 나는 스칼라에서 훌륭한 액터 구현을 찾고 있었고 스칼라와 아카 (Akka)를 모두 보았습니다. 나는이 두 가지 복합체를 발견했다. 그렇다면 나는 간단하고 우아하며 잘 설계된 리프트 액터를 발견했습니다. 위의 모든 것은 Java에서 유용합니다 (Java에 친숙한 명명 된 메소드를 통해).

토론에 :에 http://erikengbrecht.blogspot.com/2009/06/pondering-actor-design-trades.html

다운로드 : http://liftweb.net/

당신은 단지 리프트 배우 _? 단지를 필요로하고 리프트 공통 _? 항아리 리프트 다운로드에서 (플러스 스칼라 표준 lib 디렉토리). Lift 배우 스칼라 소스를 살펴보십시오. 매우 깔끔합니다.

11

Jumi Actors은 Java 용 액터 라이브러리입니다. Java 코드에서 자연스럽게 사용하도록 설계되었으므로 모든 메시지에 대해 클래스를 만들 필요는 없지만 메시지는 인터페이스에서 메서드로 표시됩니다. 또한 배우도 가비지 수집되므로 명시 적으로 중지 할 필요가 없습니다. Jumi 액터를 사용하는 코드는 testable입니다.이 두 유닛은 액터 컨테이너없이 테스트 할 수 있으며 결정 성있는 단일 스레드 컨테이너 구현을 사용하여 테스트 할 수 있습니다.

Akka Actors과 비교하면 이진 크기 (33KB 대 10MB 이상)가 훨씬 빠르고 훨씬 빠릅니다. the Pi example in Akka Tutorialthe same example using Jumi Actors을 살펴보면, Akka의 계산에는 약 480-520ms가 소요되지만 Jumi 액터의 계산에는 350-390ms 밖에 걸리지 않습니다. (액터가 작업을하지 않고도 메시지 전달 만 측정한다면 차이는 분명 더 커질 것입니다.) 시작 성능을 비교할 때 Akka 컨테이너를 시작하는 데 620ms가 걸리지 만 Jumi 액터 컨테이너를 시작하는 데는 25ms 밖에 걸리지 않습니다.

3

다른 옵션은 GPars입니다. Groovy 기반이지만 Java에서 Akka와 같이 호출 할 수 있습니다.

관련 문제