공부/기타

동기(Synchronous)와 비동기(Asynchronous)의 개념 및 차이점

셩잇님 2023. 2. 2. 23:13
반응형

 

 

1. 동기(Synchronous)의 개념

프로그래밍의 동기(Synchronous) 메서드는 다른 코드가 실행되도록 허용하기 전에 완료까지 실행되는 메서드입니다. 즉, 동기(Synchronous) 메서드는 실행이 완료될 때까지 다른 코드 실행을 차단합니다.

동기식(Synchronous) 접근 방식에서 호출 코드는 호출된 메서드가 실행을 완료하고 결과를 반환한 후 실행을 계속할 때까지 기다립니다. 이로 인해 여러 기능 또는 작업이 동기식(Synchronous)으로 실행될 수 있으며 각 작업은 시작하기 전에 이전 작업이 완료될 때까지 기다려야 합니다.

동기식(Synchronous) 방법은 간단하고 이해하기 쉽지만 특정 상황에서 성능과 응답성이 저하될 수도 있습니다. 

예를 들어 동기(Synchronous) 메서드가 느린 디스크에서 읽기 또는 느린 네트워크 응답 대기와 같이 시간이 많이 걸리는 작업을 수행하는 경우 호출 코드가 차단되고 해당 시간 동안 사용자 인터페이스가 응답하지 않을 수 있습니다.

다음은 C#의 동기식(Synchronous) 메서드 예입니다.

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Starting Main method");
        DoSomething();
        Console.WriteLine("Main method finished");
    }

    static void DoSomething()
    {
        Console.WriteLine("Starting DoSomething method");
        System.Threading.Thread.Sleep(2000);
        Console.WriteLine("DoSomething method finished");
    }
}

 

위 예제에서 Main 메서드는 2초 동안 절전 모드로 시간이 많이 걸리는 작업을 수행하는 DoSomething 메서드를 호출합니다. Main 메서드는 "Main method finished" 메시지를 인쇄하기 전에 DoSomething 메서드가 완료될 때까지 기다립니다. 이것은 동기 메서드 호출의 예입니다.

 

2. 비동기(Asynchronous)의 개념

프로그래밍의 비동기식(Asynchronous) 메서드는 백그라운드에서 실행되는 메서드이며 실행 중에 다른 코드를 실행할 수 있습니다. 즉, 비동기(Asynchronous)  메서드는 코드 실행을 차단하지 않고 여러 작업을 동시에 실행할 수 있습니다.

비동기(Asynchronous) 방식에서는 호출 코드가 메서드 실행을 시작한 다음 메서드가 완료될 때까지 기다리지 않고 계속해서 다른 코드를 실행합니다. 메서드는 백그라운드에서 실행되며 완료되면 호출 코드에 신호를 보냅니다. 이를 통해 여러 작업을 병렬로 실행할 수 있으므로 특정 상황에서 성능과 응답성이 향상됩니다.

예를 들어, 비동기식(Asynchronous)  메서드가 느린 디스크에서 읽거나 느린 네트워크 응답을 기다리는 것과 같이 시간이 많이 걸리는 작업을 수행하는 경우 백그라운드에서 실행할 수 있으므로 호출 코드가 계속 실행되고 사용자 인터페이스가 유지됩니다. 그 시간 동안 반응합니다.

다음은 async 및 await 키워드를 사용하는 C#의 비동기(Asynchronous)  메서드 예입니다.

using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        Console.WriteLine("Starting Main method");
        await DoSomethingAsync();
        Console.WriteLine("Main method finished");
    }

    static async Task DoSomethingAsync()
    {
        Console.WriteLine("Starting DoSomethingAsync method");
        await Task.Delay(2000);
        Console.WriteLine("DoSomethingAsync method finished");
    }
}

 

이 예제에서 Main 메서드는 await 키워드를 사용하여 DoSomethingAsync 메서드를 호출합니다. DoSomethingAsync 메서드는 Task.Delay 메서드를 사용하여 2초 동안 지연하여 시간이 많이 걸리는 작업을 수행합니다. Main 메서드는 DoSomethingAsync 메서드가 완료되기 전에 "Main method finished" 메시지를 계속 실행하고 인쇄합니다. 이것은 비동기 메서드 호출의 예입니다.

 

3. 동기(Synchronous)와 비동기(Asynchronous)의 차이점

 

동기식(Synchronous) 메서드와 비동기식(Asynchronous)  메서드의 주요 차이점은 코드 실행 및 차단을 처리하는 방식입니다. 동기식(Synchronous) 메서드는 완료될 때까지 코드 실행을 차단하는 반면, 비동기식(Asynchronous) 메서드는 다른 코드가 백그라운드에서 실행되는 동안 계속 실행되도록 허용합니다.

 

동기(Synchronous) 메서드에서 호출 코드는 계속하기 전에 호출된 메서드의 실행이 완료될 때까지 기다려야 하는 반면, 비동기(Asynchronous) 메서드에서는 호출 코드가 계속 실행될 수 있고 메서드는 백그라운드에서 실행됩니다.

동기식(Synchronous) 방법은 간단하고 이해하기 쉽지만 시간이 많이 걸리는 작업을 수행하는 경우와 같은 특정 상황에서 성능과 응답성이 저하될 수 있습니다. 반면에,  비동기(Asynchronous)  메서드는 이러한 상황에서 성능과 응답성을 향상시킬 수 있지만 이해하고 구현하기가 더 복잡할 수도 있습니다.

일반적으로 비동기(Asynchronous)  메서드는 호출 코드를 차단하지 않고 백그라운드에서 실행할 수 있는 장기 실행 또는 리소스 집약적인 작업에 더 적합합니다. 이러한 작업의 예로는 느린 디스크에서 읽기, 느린 네트워크 응답 대기 또는 시간 소모적인 계산 수행 등이 있습니다.

 

 

 

반응형