2012-03-09 3 views
1

Java 환경에서 Ruby 메서드를 호출하려고합니다. 나는이 네 가지 솔루션을 시도 :Java에서 MRI Ruby를 호출/사용하는 방법?

  1. 사용 JRuby를을. 이것은 Java 가상 머신의 모든 것을 실행하기 때문에 우수합니다. 그러나 몇 가지 중요한 (받아 들일 수없는) 성능 문제가 발생했습니다.
    • JRuby는 현재 C 확장자로 작동하지 않습니다.
    • Ruby에서 포크를 호출하면 Java 가상 머신에서 실행할 때 안정적으로 동작하지 않습니다.
    • 코드가 JRuby에서 MRI Ruby보다 느리게 실행됩니다.
  2. 사용 ROR. Ruby on Rails를 통해 웹 서비스를 제공하여 Java를 모두 건너 뜁니다. 이것은 작동하지만 회사의 IT 정책에서 Java 웹 서비스 만 사용하는 경우를 제외하고 IT 부서 (Java 및 웹 서비스 개발자) 또는 R & D 부서 (Ruby 및 C 개발자)도 해당 도메인 외부에서 작업하도록합니다.
  3. Java 시스템 호출을 사용하십시오. Java 시스템 호출로 독립형 Ruby 프로그램을 호출하고 XML 파일을 통해 입력 및 출력 데이터를 구문 분석 할 수 있습니다. 이 작업은 가능하지만 새 프로세스를 시작하고 XML 파일을 처리하는 오버 헤드가 성능 문제입니다.
  4. RJB을 사용하십시오. Ruby Java Bridge를 사용하면 Ruby에서 Java를 호출 할 수 있습니다. 그러나 이는 내가 필요한 것의 반대입니다.

위의 설명 된 문제없이 Java에서 MRI Ruby를 호출하는 방법이 있습니까?

+1

호기심에서 벗어난 것 : JRuby가 MRI보다 느린 것은 무엇입니까? JRuby는 MRI보다 대기 시간이 훨씬 길지만 처리량은 훨씬 더 높아야합니다. 그렇지 않으면, JRuby *는 그 버그를 고려할 것입니다. –

+0

한 동료가 JRuby 솔루션을 1 년 전에 들여다 보았습니다 (201103). 제가 설명한 세 가지 문제를 경험했습니다. 지금은 불행하게도 JRuby가 더 이상 우리 소프트웨어로 더 느리게 동작하는 것처럼 보였습니다. 가장 큰 문제점은 gnu 과학 라이브러리를 포함한 C 확장을 사용할 수 없다는 것이 었습니다. C에서 중요한 부분을 코딩하는 기능은 성능을 얻는 주된 방법이므로이를 수행 할 수 없다는 것이 중요한 문제 였지만 이후 JRuby는 개선되었습니다. –

+0

아, 네, C에 의존한다면 문제가 될 것입니다. JNI *는 메모리와 타입 안전성을 보장하는 동시에 포인터 연산과 같은 C 관용구를 허용하는 복잡성 때문에 주로 느립니다. Java 용 수치 라이브러리를 확인 했습니까? HotSpot JVM은 요즘 특히 자바 7에서 정말 대단히 멋지다. 정말 C를 능가하거나 심지어 이길 수 있다면 놀라지 않을 것이다. –

답변

1

당신은, 대신 파일을 통해하지만 XML보다 더 효율적으로 뭔가를 사용하여 파이프

  • 를 통해
  • 가 통신하지 않는 장기 실행 데몬 프로세스를 사용

    • 시작하지 프로세스에 의해 # 3를보다 효율적으로 만들 수 like Protocol Buffers

    그러나 일반적으로 나는 놓친 옵션이 표시되지 않습니다. 죄송합니다.

  • 관련 문제