직접 짠 프로그램이고 멀티쓰레딩 요소가 아무것도 없는데 4코어 8쓰레드 피씨에서 프로그램 실행시 cpu 점유율이 300퍼센트 이상 나옵니다
Stream을 사용하긴 하는데 pararell 쓰는것은 아니고 인터넷 검색해봐도 왜 그런지 모르겠네요
컴파일러가 최적화해주는 요소일까요
직접 짠 프로그램이고 멀티쓰레딩 요소가 아무것도 없는데 4코어 8쓰레드 피씨에서 프로그램 실행시 cpu 점유율이 300퍼센트 이상 나옵니다
Stream을 사용하긴 하는데 pararell 쓰는것은 아니고 인터넷 검색해봐도 왜 그런지 모르겠네요
컴파일러가 최적화해주는 요소일까요
메인함수가 다음이 끝입니다.
try (Stream<String> lines = Files.lines(Paths.get(filePath))) {
lines.map(funA).foreach(funB);
} catch (IOException e) {
e.printStackTrace();
}
funA와 funB에는 멀티쓰레딩 요소가 전혀 없습니다.
어디에다가 sleep 을 걸어보면 될까요? 그리고 sleep 걸면 어떤걸 확인할 수 있나요?
일단 for-loop로 수정하고 그래도 개선이 안된다면 반복 횟수 많은 루프 안에 sleep 줘보시고요
멀티쓰레드 코드가 없는데 cpu 점유율이 왜 100% 를 초과하는지에 대한 의문이었거든요..
싱글쓰레드면 cpu 100%가 상한선이 아닌가 해서요.
검색하다보니 stream 에서 map이나 foreach에서 pararell 하게 돌릴 수도 있다고 나오는데 이거 때문인가봅니다
저도 pararell 아니면 싱글쓰레드로 알고있었는데 CPU 점유율이 너무 높게 나와서 그런가 싶었습니다.
아래 댓글도 보니 그 사람이 잘못된 답변을 한 것 같기도 하네요.
추가) 테스트해보니 가비지 컬렉션 문제가 맞는 것 같네요