본문 바로가기
프로그래밍

C# Web API 구조 - 비동기, 멀티스레드, 쓰레드 풀

by bantomak 2025. 1. 3.
반응형

C# Web API의 구조에 대해서

C# Web API은 비동기, 멀티스레드, 스레드 풀을 다 사용한다. 비동기, 멀티스레드, 쓰레드 풀을 사용하면 애플리케이션의 성능, 응답성, 확장성을 크게 향상할 수 있기 때문이다. 각 개념의 장점과 이를 사용할 때의 이점에 대해서 알아보자.

비동기(Asynchronous)

비동기 프로그래밍은 작업이 완료될 때까지 스레드가 대기하지 않고, 그동안 다른 작업을 처리할 수 있도록 하는 방식이다.

C#이 제공하는 async/await 패턴을 사용하여 CPU 사용률을 최적화 할 수 있다.

  • 높은 처리량 : CPU가 대기 중인 작업을 처리하는 대신 다른 작업을 수행
  • I/O 작업 최적화 : 비동기 방식은 CPU를 차단하지 않고, 네트워크 요청 또는 파일 읽기/쓰기를 기다리는 동안 다른 작업 수행
  • 응답성 개선 : GUI 애플리케이션에서 UI 스레드를 차단하지 않아 사용자 경험이 개선
  • 스레드 효율성 : 스레드를 차단하지 않으므로, 동일한 스레드로 더 많은 작업을 처리

비동기 예제

public async Task<string> GetDataAsync()
{
    using (var httpClient = new HttpClient())
    {
        string result = await httpClient.GetStringAsync("https://example.com");
        return result;
    }
}
 

C# 비동기 프로그래밍 TAP이란 무엇인가?

TAP(Task-based Asynchronous Pattern)이란?TAP(Task-based Asynchronous Pattern)은 .NET Framework 4.5에서 비동기 프로그래밍을 단순화하기 위해 도입된 패턴이다. TAP은 Task 및 Task 클래스를 기반으로 비동기 작업을 처

jettstream.tistory.com

멀티스레드(Multi-threading)

멀티스레드는 애플리케이션이 여러 스레드를 생성하여 병렬로 작업을 수행하는 방식이다. 하나의 프로세스에서 여러 스레드를 사용하여 동시에 여러 작업이 처리 가능하다.

  • 병렬 처리 : CPU의 여러 코어를 활용해 작업을 동시에 처리하여 실행 시간을 단축
  • 응답성 개선 : 하나의 스레드가 차단되더라도 다른 스레드에서 작업을 계속 처리할 수 있어서 사용자 경험 개선
  • 독립성 : 데이터 처리와 파일 쓰기 등 독립적인 작업 처리가 가능
  • CPU 활용 극대화 : 멀티코어 환경에서 CPU의 모든 코어를 활용해 성능을 최적화

멀티스레드 예제

멀티스레드를 활용하면 별도의 스레드를 생성해서 독립적인 작업을 실행하는 것이 가능하다.

Task.Run(() =>
{
    Console.WriteLine("This is running on a separate thread!");
});
 

스레드(Thread)란

스레드(Thread)란?오늘날의 운영체제들은 프로세스를 효율적으로 사용하고, 작업의 유연성을 얻기 위해 멀티스레드를 지원한다.스레드의 정의프로세스가 생성되면 CPU 스케줄러는 프로세스가 해

jettstream.tistory.com

쓰레드 풀(Thread Pool)

쓰레드 풀은 미리 생성된 스레드 집합으로, 작업을 효율적으로 처리하기 위해 스레드를 재사용한다.

이는 스레드를 생성하는데 드는 자원량이 크기 때문에 미리 만들어두고 이를 재사용하기 위함이다.

  • 스레드 생성 비용 절감 : 스레드를 새로 생성하는 오버헤드를 줄이고, 미리 생성된 스레드 사용
  • 효율적인 리소스 관리 : 동시에 실행 가능한 스레드 수를 제한하여 CPU와 메모리 사용을 최적화
  • 자동 조절 : 쓰레드 풀이 현재 시스템의 부하에 따라 스레드 수를 자동으로 조절
  • 확장성 : 대규모 애플리케이션에서 많은 요청을 처리할 때 성능 저하를 최소화

쓰레드 풀 예제

ThreadPool.QueueUserWorkItem(state =>
{
    Console.WriteLine("Task executed by ThreadPool.");
});

비동기, 멀티스레드, 쓰레드 풀 정리

함께 읽으면 좋은 글

 

IOCP에 대해서

IOCP(I/O Completion Port)란 무엇인가?소켓이나 파일의 입출력을 최소한의 스레드를 사용해서 처리하는 기법이다. 이를 위한 스레드 풀링이나 비동기 처리등을 운영체제에서 관리해주기 때문에 사용

jettstream.tistory.com

댓글