단일 코어 시스템이 단일 스레드 만 실행할 수 있다는 가정하에 시작합니다. 이제 Java/Spring 기반의 junit 테스트를 작성하여 20 개의 스레드를 생성하고 BigDecimal을 사용하여 많은 수의 계승을 계산했습니다.jvm이 실행 가능한 상태의 많은 스레드를 처리하는 방법
Visual VM에서 junit를 모니터링했는데 20 개의 스레드 모두가 작동하고 시각적 VM에서 실행 중임 (녹색)으로 표시되는 것을 볼 수 있습니다. 내가 알다시피, jvm은 마치 그들이 모두 실행중인 것처럼 보이게하지만 아주 세분화 된 수준에서 각 스레드는 CPU 사이클을 위해 진행될 것입니다. 시각적으로나 숫자로 모든 스레드가 서로 간섭하고 CPU가 한 스레드에서 다른 스레드로 전환하는 방식이나 도구가 있습니까? 또는 다른 말로하면 주어진 함수를 수행하는 주어진 스레드 수, CPU의 극단적 인 컨텍스트 전환으로 인한 포화 점 또는 감소하는 리턴 수를보고 싶습니다.
해결해야 할 실제 문제는 대형 Java 응용 프로그램에서 스레드를 조정하는 것입니다. 샘플 실행에서 스레드 경합이 표시되지 않으면 큰 응용 프로그램에서도 스레드 경합이나 악용 사례를 볼 수 없습니다.