제목이 약간 잘못되었지만 다소 혼란 스럽습니다.자바에서의 프로그램 성능은 스레드 변화에 따라 변동합니다.
나는 프로그램의 작업을 수행하기 위해 x 개의 스레드 수를 인스턴스화하는 인수 x를 취하는 java로 프로그램을 작성했습니다. 내가 실행중인 기계는 8 개의 코어/32 개의 스레드를 병렬로 처리 할 수 있습니다 (각 코어에는 4 개의 하이퍼 스레드가 있음). 지난 8 개의 스레드 (예 : 22)를 실행했을 때, 스레드를 균등하게 실행하면 스레드가 23 개 스레드 (실제로 느림)를 실행할 때와 달리 프로그램이 더 빠르게 실행됩니다. 성능 차이는 둘 사이의 약 10 %입니다. 왜 이럴 수 있니? 쓰레드 오버 헤드는 실제로이 점을 고려하지 않았고, < 개의 32 쓰레드를 실행하는 한, 쓰레드의 수를 증가시킬 때만 더 빨라야한다고 생각합니다.
프로그램이 무엇을하는지 아이디어를주기 위해 프로그램은 1000 * 1000 배열을 가져오고 각 스레드는 업데이트 할 배열의 일부를 할당받습니다 (반올림/남은 부분은 마지막 스레드에 인스턴스화됩니다) .
홀수/짝수 스레드의 성능 차이에 대한 이유가 있습니까? 내가 상상할 수
항목 1과 관련하여이 동작은 운영 체제에 따라 다를 수 있습니다. 운영 체제는 이전에 사용했던 코어에서 휴면 스레드를 "깨우기"위해 시도 할 수있는 일부 예약 알고리즘을 가지고있어 캐시 누락을 줄입니다. 알고리즘에 따라 홀수를 사용할 때 잘못된 코어에서 스레드가 깨어날 확률을 높일 수 있습니다. 또한 단지 추측. – toto2