멀티스레딩 기본 원칙

Java 코드 최적화

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

순차 실행 vs. 병렬 실행

  • 순차 처리 -> 작업이 하나씩 순서대로 실행됩니다
  • 병렬 처리 -> 여러 작업이 동시에 실행됩니다

어떻게 가능할까요?

  • 최신 CPU는 여러 개의 코어를 가지고 있습니다
  • 스레드: 프로그램 실행의 최소 단위
  • 멀티스레딩은 이 코어들에 작업을 분산합니다

싱글 스레딩은 자동차가 한 줄로 서서 차례대로 지나가야 하는 1차선 도로와 같습니다. 멀티스레딩은 여러 차선이 있어 자동차가 동시에 달릴 수 있는 것과 같습니다!

Java 코드 최적화

스레드 사용하기

  • Thread 클래스를 사용하면 새로운 실행 경로를 만들 수 있습니다
  • 각 Thread는 독립적으로 실행될 수 있습니다
Runnable task = () -> {
    System.out.println("Processing on thread: " + 
                       Thread.currentThread().getName());
};

Thread thread = new Thread(task);
thread.start();
Processing on thread: Thread-0
Java 코드 최적화

여러 스레드 다루기

List<Thread> threads = new ArrayList<Thread>();
for (int i = 0; i < 4; i++) {
    Thread thread = new Thread(() -> System.out.println("Processing data on Thread-" + i));
    threads.add(thread);
    thread.start();
}

for (Thread t : threads) {
    t.join(); // Waits for all threads to complete
}
// Processing data on Thread-0
// Processing data on Thread-2
// Processing data on Thread-1
// Processing data on Thread-3
Java 코드 최적화

병렬 스트림

  • 스트림 - 병렬 처리를 단순화하는 Java 8 이상 기능
  • 스레드 생성과 관리를 자동으로 처리합니다
  • 생성 방법은 두 가지입니다:
    • collection.parallelStream()
    • Stream.of(...).parallel()
Java 코드 최적화

병렬 스트림 예제

// Sequential processing
List<Integer> result1 = new ArrayList<>();
for (int i = 0; i < numbers.size(); i++) {
    result1.add(numbers.get(i) * 2);
}

// Sequential processing with stream List<Integer> result2 = numbers.stream() .map(n -> n * 2) .collect(Collectors.toList());
// Parallel processing with parallel stream List<Integer> result3 = numbers.parallelStream() .map(n -> n * 2) .collect(Collectors.toList());
Java 코드 최적화

병렬 처리를 사용해야 할 때

  • CPU 집약적인 작업
  • 독립적인 데이터 처리
  • 대규모 데이터 집합
  • 사용 가능한 CPU 코어 수 > 1
  • 다음의 경우 병렬화 오버헤드가 그만한 가치가 없을 수 있습니다:
    • 소규모 데이터 집합
    • 단순한 작업
Java 코드 최적화

요약

  • 병렬 실행 경로를 생성하는 Thread 클래스
  • 컬렉션 처리를 단순화하는 병렬 스트림
  • 효과는 다음에 따라 달라집니다:
    • 워크로드 유형
    • 데이터 크기
    • 사용 가능한 코어 수
Java 코드 최적화

연습해 봅시다!

Java 코드 최적화

Preparing Video For Download...