인 메모리 데이터 모델을 시작하고 생성 한 다음 입력 세트 및 해당 데이터 모델에 대해 여러 문자열 검사 알고리즘을 실행하는 (명령 줄에서 지정한) 스레드 수를 작성하는 프로그램이 있습니다. 작업은 입력 문자열 세트의 스레드 사이에서 나누어지고 각 스레드는 동일한 메모리 내 데이터 모델 인스턴스를 반복합니다 (다시 업데이트되지 않으므로 동기화 문제가 없습니다).내 멀티 스레드 Java 프로그램이 내 컴퓨터의 모든 코어를 초과하지 않는 이유는 무엇입니까?
저는 쿼드 코어 프로세서 2 개가 장착 된 Windows 2003 64 비트 서버에서이 작업을 수행하고 있으며, Windows 작업 관리자를 보면 최대 초과 작업이 수행되고 있지 않으며 (특히 세금이 부과 된 것처럼 보이지 않습니다) 내가 10 개의 스레드를 실행할 때. 이것은 정상적인 행동입니까?
7 개의 스레드가 모두 유사한 양의 작업을 완료하는 것으로 보입니다. 대신 7 개의 스레드로 실행하는 것이 좋습니다.
더 많은 스레드로 실행해야합니까? ... JVM이 스레드간에 더 많은 컨텍스트 전환을 수행하므로 이것이 해로울 수 있다고 가정합니다.
또는 적은 수의 스레드로 실행해야합니까?
또는 이것을 측정하는 데 사용할 수있는 가장 좋은 도구는 무엇입니까? ... 프로파일 링 도구가 여기에서 나를 도와 주겠습니까? 실제로 병목 현상을 감지하는 데있어 여러 가지 프로파일러 중 하나입니다 (여기에 하나 있다고 가정) 나머지보다?
참고로 서버는 SQL Server 2005도 실행 중이지만 (관련성이있을 수도 있고 그렇지 않을 수도 있음) 프로그램을 실행할 때 그 데이터베이스에서 아무런 변화가 없습니다.
또한 스레드는 문자열 일치 만 수행하고 기다리는 데 필요한 I/O 또는 데이터베이스 작업을 수행하지 않습니다.
정말 쿼드 코어입니까, 아니면 HT가있는 4 개의 논리 프로세서입니까 (각각 2 개의 스레드가있는 2 개의 코어)? – Lucero
@Lucero, 어떻게 알 수 있습니까? 이 서버는 2 개의 Xeon E5320 1.86 GHz 칩이 장착 된 IBM X3400입니다. 나는 그들이 쿼드 코어라고 믿고, 나는 또한 위키 백과 (http : //en.wikipedia)를 보았습니다.org/wiki/Xeon - 그걸 확인해 봤지만 다행스럽게 입증 될 것 같아. –
그 사람들이 E5320이라면 HT 지원이없고 내 의견은 중요하지 않다. HT를 사용하면 CPU는 기본적으로 코어 당 두 개의 스레드 컨텍스트를 유지하므로 스레드가 멈 추면 (예 : 메모리 액세스 등) 다른 구성 요소의 코어를 사용할 수 있으며 HT 구성의 순수한 계산 능력이 두 개의 실제 코어 – Lucero