Ruby와 JRuby를 처음 접했고 Ruby에서 멀티 스레드 코드를 구현하려고했지만 GIL이 코드를 병렬로 실행할 수 없다는 것을 알게되면 JRuby로 옮겼습니다. 동일한 코드를 구현하고 JRuby에서의 실행 시간이 Ruby보다 훨씬 낫습니다. 나는 JRuby 스레딩이 자바 스레딩과 매우 유사하다는 것을 연구했기 때문에 자바에서도 같은 코드를 구현했으며 JRuby보다 거의 10 배 빠른 Java에서 성능 (실행 시간)을 얻었습니다. 이유를 설명 할 수있는 이유는 무엇입니까? 이거? 미리 감사드립니다.Ruby 대 JRuby 대 Java의 멀티 스레딩
0
A
답변
0
JRuby가 Java로 구현 된 Ruby를 생각하면 설명이 매우 간단합니다. 즉, .rb 조각을 사용하여 실행하는 'Java 코드가 더 많음'을 의미합니다. .class는 .class로 컴파일됩니다. ...
메소드 전달이 비용이 적게 들더라도 Ruby의 동적 인 특성이 있습니다. 당신 a+1
는 자바가의 int에 추가 할 때 루비의 오버 플로우 검사 등과 함께 추가로 a+1
동안
귀하의 질문은 매우 일반적이며, 우리는 또한 성능의 어떤 종류의 당신이 한 측정 모르지만 결국 모든 것이 온다 JRuby로 실제 작업을 수행 할 때 생산성이 10 배 이상 향상 될 가치가있는 경우 JRuby를 사용하면 "원시"Java에서 해당 부분을 다시 수행 할 수 있습니다.
Ruby는 Java와 같은 정적 언어보다 일반적으로 실행 속도가 느린 동적 언어입니다. 성능을 향상시키는 동적 언어에 대한 다양한 옵티 마이저가 있습니다 (예 : 많은 작업이 브라우저에서 자바 스크립트 속도를 높입니다). 그러나 언어의 기본 원칙 때문에 동적 언어에는 고유 한 성능 단점이 있습니다. 성능 및 정적 컴파일 시간 안전/vs 개발 속도 및 임시 해킹은 정적 언어와 동적 언어 간의 주요 찬성론입니다. – slipperyseal
당신의 제안에 대해 @slipperyseal에게 감사드립니다. 멀티 스레딩을 구현하는 동안 정적 및 동적 유형 지정 언어 간의 성능 차이에 대한 특별한 이유가 있습니까? 나는 스레드의 실행이나 그와 같은 어떤 차이점을 의미합니까? –
그 자체가 아닙니다. 잠금 또는 스핀 잠금 (현대 JVM은하지 않을 것입니다 - 현대 JVM 동기화가 매우 빠름)에 대해 많은 논쟁이 없으면 않습니다. 귀하의 문제는 단순히 다음과 같이 생각됩니다. JRuby에서 실행되는 Ruby 코드는 동일한 일반 Java 코드보다 느립니다. – slipperyseal