여러 스레드를 만들고 모든 스레드가 동일한 특성 파일을 읽습니다 (특성 파일에 대한 쓰기 조작이 없습니다). 같은 등록 정보 파일이 여러 스레드에서 여러 번 읽히기 때문에 성능 오버 헤드가 발생합니까?Java에서 동일한 등록 정보 파일을 읽는 여러 스레드가 성능 문제를 일으킬 수 있습니까?
답변
나는 load the properties file에게 한 번 제안하고 모든 스레드가 동일한 Properties 인스턴스를 사용합니다.
연속 읽기가 동시성 문제가되지 않습니다
- 더 나은 성능이 응용 프로그램 전체 시스템의
- 더 나은 가용성 :
로드 번 디스크 액세스를 줄일 수 있습니다.
didierc의 의견은 가능한 병목 현상을 강조합니다. Properties에 대한 각 액세스가 동기화되므로 스레드가 값을 읽을 때 다른 모든 것이 대기 할 수 있습니다.
이 문제를 방지하려면 스레드의 생성자 또는 초기화에
Properties
의 사용을 제한 할 수 있습니다. 을 루프 내의Thread.run()
메쏘드 안에 사용하지 마십시오.
mutliple 스레드가 공유하는 동일한 속성 개체 참조가 될 수 있으며 문제를 일으킬 수 있습니까? –
@raghuramgururajan 선택하는 것이 좋습니다. 두 솔루션 모두 시도해 볼 수 있으며 속도와 메모리 소비면에서 가장 잘 작동하는 것을 볼 수 있지만 동일한 객체 인스턴스에 대한 동시 액세스를 피하려면 스레드간에 명시 적으로 속성 목록을 복사해야합니다. 'Properties'는 동기화 된'Hashtable'에서 상속받습니다. – didierc
대답은 "다릅니다"입니다. 대부분은 속성 파일을 읽는 것 외에도 각 스레드가 수행하는 작업량에 따라 다릅니다. 각 스레드가 파일 읽기 이외에 많은 작업을 수행하면 성능에 큰 영향을주지 않습니다.
잠재적 인 정확성 문제에 더 관심을 가져야합니다. 다른 스레드가 다른 속성을 사용하면 프로그램이 올바르게 동작합니까? 그렇지 않은 경우, 프로그램에 경합 위험이 있습니다. 프로그램이 실행되는 동안 속성 파일이 변경 (또는 삭제)되면 일부 스레드가 다른 속성을 사용하여 잘못된 계산을 생성 할 수 있습니다.
프로그램 파일에는 등록 정보 파일이 사용됩니다. 프로그램은 일반적으로 실제 작업을 수행하기 전에 시작한 후 모든 구성 정보를 읽습니다. 그러므로 은 구성이 잘못되면이 실패 할 수 있습니다. 마찬가지로 수행해야 할 스레드의 생성을 실제 작업으로 처리해야합니다. 이렇게하면 프로그램 사용자가 스레드 당 하나의 메시지가 아닌 구성의 오류 당 하나의 오류 메시지 만 얻을 수 있습니다.
- 1. Java에서 여러 스레드가 문제를 일으킬 수 있습니다.
- 2. 동일한 개체를 동시에 호출하는 여러 스레드가 동시에 작동합니다. 그것은 문제를 일으킬 수 있습니까?
- 3. 많은 불필요한 변수가 C#에서 성능 문제를 일으킬 수 있습니까?
- 4. 여러 스레드가 간섭없이 여러 파일을 읽는 방법?
- 5. 레일 : after_create가 아약스 성능 문제를 일으킬 수 있습니다.
- 6. git 저장소의 여러 기록이 향후 문제를 일으킬 수 있습니까?
- 7. `const char *`가 문제를 일으킬 수 있습니까?
- 8. 다른 스레드가 파일을 읽는 동안 파일을 어떻게 수정할 수 있습니까?
- 9. Java에서 컬렉션을 수정하는 여러 스레드가 있습니까?
- 10. Java에서 여러 언어로 된 파일을 읽는 방법?
- 11. indefinatley를 실행하는 스레드가 메모리 누수를 일으킬 수 있습니까?
- 12. JQTouch가 Android에서 문제를 일으킬 수 있습니다.
- 13. 파이썬에서 동일한 파일을 여러 번 읽는 중
- 14. 동일한 값을 동일한 변수에 쓰는 스레드가 여러 개 있으면 좋습니까?
- 15. .htaccess가 루핑을 일으킬 수 있습니까?
- 16. 등록 정보 파일에서 디렉토리 경로를 읽는 중
- 17. 등록 정보 파일을 삭제할 수 없습니다.
- 18. 등록 정보 파일을 통한로드 세트
- 19. UIButton swizzling이 UITableViewCellAccessoryType의 문제를 일으킬 수 있습니다.
- 20. strings.xml의 문자열이 Android에서 문제를 일으킬 수 있습니다.
- 21. Java에서 동일한 오디오 클립을 동시에 여러 번 재생할 수 있습니까?
- 22. Lucene.Net에서 IndexSearcher의 동일한 인스턴스를 여러 스레드가 동시에 사용할 수 있습니까?
- 23. 서버 경로를 기준으로 등록 정보 파일을 배치 할 수 있습니까
- 24. pthread_cond_signal이 충돌을 일으킬 수 있습니까?
- 25. 삽입 쿼리는 선택 쿼리에서만 동시성 문제를 일으킬 수 있습니까?
- 26. 이 코드 조각은 메모리 측면에서 문제를 일으킬 수 있습니까?
- 27. 어떤 CSS 속성이 Internet Explorer에서 문제를 일으킬 수 있습니까?
- 28. 이 코드가 메모리 누수 문제를 일으킬 수 있습니까?
- 29. XHTML이 예기치 않게 IE에서 문제를 일으킬 수 있습니까?
- 30. 다음 코드는 C++에서 문제를 일으킬 수 있습니까?
이 파일을 얼마나 자주 읽습니까? –
필자가 글을 쓰지 않는 한, 동시성 문제가있을 것이라고는 말하지 않겠다. –
이 모든 것들이 아래쪽에있다. 시스템 성능이 스레드 경합을 겪고 있음을 알았습니까? 특히 데이터가 제공되지 않아 추측하는 것은 쓸모가 없습니다. 하나의 스레드가 있습니까? 100 개의 실? –