2010-08-05 4 views
2

높은, 내가 숙고하고있는 설계 질문에 대한 의견을 누군가에게 줄 수 있는지 궁금하다. 지금은 데이터 스트림에서 많은 계산을 수행 할 때마다 CPU 사용률이 85 %로 1 초마다 상승하는 자바 프로그램이 있습니다. 듀얼 프로세서를 활용하고 싶지만 현재 디버깅과 테스트에 많은 시간을 투자 했으므로 프로그램을 멀티 스레드로 재 설계하고 싶지는 않습니다. 만약 두 개의 별도의 JVM 인스턴스에서 프로그램을 실행하고 이론적으로 성능을 향상시키는 작업 부하를 분할한다면 어떻게 될까요? - 던컨동일한 기계 성능 질문에 두 개의 개별 JVM으로 작업량 분배하기

+0

여러 JVM은 별도의 기계에 가야합니다. –

답변

3

작업 부하를 분할하려고하는 경우가 작동 뭔가를 깨는에 대해 걱정하는 경우, 당신은 아마 ...

futhermore 더 낫다는 멀티 스레드해야 할 어떤 리팩토링 것, 그 의미 향후 리팩터링이 원활하게 진행될 수 있도록 충분한 테스트를 작성하지 않았습니다. 따라서 핵심 기능을 포착하는 몇 가지 테스트를 작성한 다음 문제 공간을 분할하고 스레딩을 사용하는 리팩터링을 작성하는 것이 좋습니다.

스레딩은 여러 가지 방법으로 프로그램의 속도를 높일 수 있습니다 : 여러 개의 코어가있는 경우, 스레딩이 그 코어를 활용하기 위해 활용 될 수

1).
2) 프로그램이 IO 집중적 인 경우 계산 항목을 IO를 처리하는 스레드와 분리 된 스레드로 분리하는 것이 좋습니다. 이것은 프로그램이 실행되고 있지만 CPU가 고정되어 있지만 디스크가있는 경우입니다.
3) 내가 아는 것보다 더 똑똑한 사람들.

당신은 또한 스레딩을 할 수 있습니다 - 하나의 CPU에서 실행되도록 1000 개의 스레드를 생성하는 것은 의미가 없을 수도 있습니다. 스레드를 유지 관리하는 오버 헤드로 인해 성능이 저하 될 수 있습니다.

편집 - 2 개의 jvms를 실행하기위한 오버 헤드가 몇 개의 스레드를 실행하는 오버 헤드보다 훨씬 높습니다.

마지막으로 문제는 '파일 묶음의 텍스트로 작업하기'와 같은 경우 파일을 2 개의 개별 디렉토리로 분리하고 각기 다른 프로그램 실행 인스턴스를 가리킬 수 있습니다. 그러나 그것은 내게 더러운 느낌이 ...

+0

멀티 스레딩에 대해 이해할 수없는 점은 하루가 끝날 때마다 1 초마다 계산해야하는 계산량이 있으면 단일 CPU 환경에서 속도를 높일 수 있다는 것입니다. CPU가 한 번에 한 명령 씩 실행할 수있을 때 얼마나 많은 효과를 낼 수 있습니까? –

+0

@duncan 위 참조 - 내 대답에 내 통찰력을 넣으십시오. – hvgotcodes

+0

정보를 제공해 주셔서 감사합니다. 귀하의 의견을 투표하려고 시도했지만 새로운 사용자가 될 수 없습니다. –

관련 문제