CS 지식

동기 ,비동기 처리

이제하네 2024. 9. 2. 12:30

1. 동기(Synchronous) 처리란?

1.1 동기 처리의 개념

동기 처리에서 작업들은 순차적으로 실행됩니다. 하나의 작업이 끝나기 전까지 다음 작업은 시작되지 않습니다. 프로그램은 한 작업이 완료될 때까지 기다린 후에야 다음 작업으로 넘어가므로, 코드의 실행 순서가 예측 가능하고 직관적입니다.

1.2 동기 처리의 특징

  • 순차적 실행: 모든 작업이 순서대로 처리되므로, 코드의 흐름이 명확하고 예측 가능합니다.
  • 간단한 디버깅: 모든 작업이 순서대로 이루어지기 때문에 디버깅이 비교적 쉽습니다.
  • 잠재적 성능 문제: 시간이 오래 걸리는 작업이 있다면, 그 작업이 완료될 때까지 다른 작업들이 모두 대기해야 하므로 성능에 영향을 줄 수 있습니다.

1.3 동기 처리 예제

public class SynchronousExample {
    public static void main(String[] args) {
        System.out.println("작업 1 시작");

        int result = add(2, 3);  // 이 작업이 끝나야 다음 줄로 넘어감
        System.out.println("결과: " + result);

        System.out.println("작업 1 완료");
    }

    public static int add(int a, int b) {
        return a + b;
    }
}

설명:

  • 이 코드에서 add 메서드를 호출하면, 이 메서드가 완료될 때까지 프로그램은 기다립니다. 그 결과를 출력한 후에야 다음 작업(여기서는 "작업 1 완료" 출력)이 실행됩니다.
  • 이 방식은 코드가 매우 직관적이며, 실행 순서를 쉽게 예측할 수 있습니다. 하지만 만약 add 메서드가 시간이 많이 걸리는 작업이라면, 그 동안 프로그램은 멈춰 있게 됩니다.

2. 비동기(Asynchronous) 처리란?

2.1 비동기 처리의 개념

비동기 처리에서는 작업이 완료될 때까지 기다리지 않고 다음 작업을 계속 진행할 수 있습니다. 작업이 비동기적으로 처리되면, 프로그램은 그 작업이 끝나기를 기다리지 않고 다른 작업을 동시에 수행할 수 있습니다. 이로 인해 프로그램의 응답성이 향상되고, 자원을 더 효율적으로 사용할 수 있습니다.

2.2 비동기 처리의 특징

  • 병렬 실행: 여러 작업을 동시에 처리할 수 있어, 프로그램의 응답성을 높일 수 있습니다.
  • 복잡한 흐름 제어: 비동기 작업들이 동시에 실행되기 때문에 코드의 흐름이 복잡해질 수 있습니다.
  • 성능 향상: 시간이 오래 걸리는 작업을 비동기적으로 처리하여 전체 프로그램의 성능을 개선할 수 있습니다.

2.3 비동기 처리 예제

import java.util.concurrent.CompletableFuture;

public class AsynchronousExample {
    public static void main(String[] args) {
        System.out.println("작업 1 시작");

        CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> add(2, 3));

        System.out.println("다른 작업 진행 중...");

        int result = future.join();  // 비동기 작업이 완료될 때까지 기다림
        System.out.println("결과: " + result);

        System.out.println("작업 1 완료");
    }

    public static int add(int a, int b) {
        return a + b;
    }
}

설명:

  • CompletableFuture.supplyAsync 메서드를 사용하여 add 메서드를 비동기적으로 실행합니다. 이 작업은 다른 작업들과 동시에 실행될 수 있습니다.
  • "다른 작업 진행 중..."이라는 메시지는 add 메서드가 완료되기 전에 출력될 수 있습니다. 그 후, future.join()을 호출하여 비동기 작업이 완료될 때까지 기다린 후 결과를 출력합니다.
  • 비동기 처리를 사용하면, 시간이 오래 걸리는 작업이 다른 작업의 진행을 방해하지 않도록 할 수 있습니다.

3. 동기 처리와 비동기 처리의 선택 기준

  • 동기 처리는 작업들이 순차적으로 실행되어야 하거나, 코드가 단순하고 직관적인 흐름을 유지해야 할 때 적합합니다. 디버깅이 쉽고, 작업 간의 순서가 중요할 때 유용합니다.
  • 비동기 처리는 시간이 오래 걸리는 작업을 비효율적으로 기다리지 않도록 하여, 프로그램의 응답성을 높이고 성능을 개선하고자 할 때 적합합니다. 특히 네트워크 요청, 파일 I/O 작업 등에서 자주 사용됩니다.

'CS 지식' 카테고리의 다른 글

TDD  (0) 2024.09.23
예외처리  (2) 2024.09.08
SOLID 원칙  (0) 2024.09.01
추상 클래스와 인터페이스  (0) 2024.08.25
오버로딩과 오버라이딩  (0) 2024.08.15