2012-11-09 5 views
3

여러 스레드를 만들고 모든 스레드가 동일한 특성 파일을 읽습니다 (특성 파일에 대한 쓰기 조작이 없습니다). 같은 등록 정보 파일이 여러 스레드에서 여러 번 읽히기 때문에 성능 오버 헤드가 발생합니까?Java에서 동일한 등록 정보 파일을 읽는 여러 스레드가 성능 문제를 일으킬 수 있습니까?

+0

이 파일을 얼마나 자주 읽습니까? –

+0

필자가 글을 쓰지 않는 한, 동시성 문제가있을 것이라고는 말하지 않겠다. –

+0

이 모든 것들이 아래쪽에있다. 시스템 성능이 스레드 경합을 겪고 있음을 알았습니까? 특히 데이터가 제공되지 않아 추측하는 것은 쓸모가 없습니다. 하나의 스레드가 있습니까? 100 개의 실? –

답변

5

나는 load the properties file에게 한 번 제안하고 모든 스레드가 동일한 Properties 인스턴스를 사용합니다.

연속 읽기가 동시성 문제가되지 않습니다

  • 더 나은 성능이 응용 프로그램 전체 시스템의
  • 더 나은 가용성 :

    로드 번 디스크 액세스를 줄일 수 있습니다.

    didierc의 의견은 가능한 병목 현상을 강조합니다. Properties에 대한 각 액세스가 동기화되므로 스레드가 값을 읽을 때 다른 모든 것이 대기 할 수 있습니다.

    이 문제를 방지하려면 스레드의 생성자 또는 초기화에 Properties의 사용을 제한 할 수 있습니다. 을 루프 내의 Thread.run() 메쏘드 안에 사용하지 마십시오.

+0

mutliple 스레드가 공유하는 동일한 속성 개체 참조가 될 수 있으며 문제를 일으킬 수 있습니까? –

+0

@raghuramgururajan 선택하는 것이 좋습니다. 두 솔루션 모두 시도해 볼 수 있으며 속도와 메모리 소비면에서 가장 잘 작동하는 것을 볼 수 있지만 동일한 객체 인스턴스에 대한 동시 액세스를 피하려면 스레드간에 명시 적으로 속성 목록을 복사해야합니다. 'Properties'는 동기화 된'Hashtable'에서 상속받습니다. – didierc

0

대답은 "다릅니다"입니다. 대부분은 속성 파일을 읽는 것 외에도 각 스레드가 수행하는 작업량에 따라 다릅니다. 각 스레드가 파일 읽기 이외에 많은 작업을 수행하면 성능에 큰 영향을주지 않습니다.

잠재적 인 정확성 문제에 더 관심을 가져야합니다. 다른 스레드가 다른 속성을 사용하면 프로그램이 올바르게 동작합니까? 그렇지 않은 경우, 프로그램에 경합 위험이 있습니다. 프로그램이 실행되는 동안 속성 파일이 변경 (또는 삭제)되면 일부 스레드가 다른 속성을 사용하여 잘못된 계산을 생성 할 수 있습니다.

프로그램 파일에는 등록 정보 파일이 사용됩니다. 프로그램은 일반적으로 실제 작업을 수행하기 전에 시작한 후 모든 구성 정보를 읽습니다. 그러므로 은 구성이 잘못되면이 실패 할 수 있습니다. 마찬가지로 수행해야 할 스레드의 생성을 실제 작업으로 처리해야합니다. 이렇게하면 프로그램 사용자가 스레드 당 하나의 메시지가 아닌 구성의 오류 당 하나의 오류 메시지 만 얻을 수 있습니다.

관련 문제