전체 글 14

Java 스트림 성능 최적화 전략: 지연연산과 루프퓨전, 쇼트서킷

1. 스트림을 사용하는 흐름스트림 생성 ex) stream()중간 연산 ex) filter(), map()종단 연산 ex) toList()Java 스트림은 스트림을 생성한 뒤 원하는 연산을 수행하고 결과를 컬렉션으로 반환하는 방식으로 사용된다.스트림을 한번이라도 사용해보았다면 익숙한 내용이다. 아래 예제를 살펴보자public List getMostPopularCategories(int n) { return countBooksByCategory().entrySet().stream() // 스트림 생성 .sorted(Comparator.comparingLong(Map.Entry::getValue).reversed()) .map(Map.Entr..

Backend/Java 2024.11.25

CPU & I/O Bound Job: 최적의 스레드 개수

서론시스템 프로그래밍 과제를 해결하며 CPU bound 와 I/O bound 작업에 대해 스레드의 개수를 변화시켜가며 총 소요시간을 관찰해보았다. CPU bound작업은 스레드의 개수가 하드웨어의 코어 개수와 비슷할때 성능이 가장 좋았고 스레드 개수가 늘어날수록 성능이 안좋아졌다. 한편, I/O 작업은 스레드가 너무 많지 않은 선에서 개수가 늘어날수록 성능이 개선되었다. 이러한 결과의 원인을 분석하고자 CPU&I/O Bound job의 특징을 정리하고 각 경우에 적정 쓰레드 개수를 어떻게 설정할지 조사해보았다.1. CPU Bound job1.1 CPU Bound 정의주로 CPU의 성능에 총 소요시간이 결정되는 작업즉, CPU의 코어 수나 클럭 속도 등이 소요 시간에 큰 영향을 미침ex) 대규모 수학 계산..

CS 2024.11.21