2016-10-13 6 views
1

JPMML Evaluator 라이브러리를 사용하고 있으며 PMML 인스턴스가 평가자를 차단하고 잠금을 생성하는 모든 평가자에게 공통적입니다. 동시에 다중 스레드 방식으로 처리합니다.Java 다중 스레드 코드에서 JPMML 평가 기의 modelEvaluator를 사용하려면 어떻게해야합니까?

//single threaded 

PMML pmml = <new pmml> 

//multithreaded 
ModelEvaluator<MiningModel> someModelEvaluatorThread = new MiningModelEvaluator(genderPmml); 

성능이 우수할까요? 같은 파일을 계속해서 다시 파싱하고 싶지 않기 때문에 특정 pmml 스레드를 만들지 않습니다.

답변

1

JPMML - 평가자 라이브러리의 README.md 파일은 말한다 :

모델 평가자 클래스는 함수형 프로그래밍의 원칙에 따라 완전히 스레드로부터 안전합니다. 그들은 모두 아주 잘 따라 얻을 것이다 - 당신이 모든 스레드 사이에 같은 모델 평가자 인스턴스를 공유하거나 각 스레드에 대한 별도의 모델 평가자 인스턴스를 만들 경우

문제가되지 않습니다. 변경 가능 상태는 org.jpmml.evaluator.EvaluationContext 개체 인스턴스에 캡슐화되며 이는 각 평가 요청에 대해 "비공개"입니다. 또한 synchronized 코드 블록을 포함하지 않으며 잠금 메커니즘을 사용하지 않습니다. 응용 프로그램의 처리량은 더 많은 스레드를 시작할 때 선형 적으로 증가해야합니다.

+2

감사합니다. 내가 JPMML로 인해 논쟁의 이슈가되었다는 것을 발견했습니다. parseDouble은 동기화되어 있고 자바 8에서 수정 된 스레드 차단을 야기합니다. –

+0

매우 흥미로운 관찰! 문서화를 위해이 JDK 문제에 대한 자세한 설명은 다음과 같습니다. https://bugs.openjdk.java.net/browse/JDK-7032154 – user1808924