반응형
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;
}
}
멀티스레드(Multi-threading)
멀티스레드는 애플리케이션이 여러 스레드를 생성하여 병렬로 작업을 수행하는 방식이다. 하나의 프로세스에서 여러 스레드를 사용하여 동시에 여러 작업이 처리 가능하다.
- 병렬 처리 : CPU의 여러 코어를 활용해 작업을 동시에 처리하여 실행 시간을 단축
- 응답성 개선 : 하나의 스레드가 차단되더라도 다른 스레드에서 작업을 계속 처리할 수 있어서 사용자 경험 개선
- 독립성 : 데이터 처리와 파일 쓰기 등 독립적인 작업 처리가 가능
- CPU 활용 극대화 : 멀티코어 환경에서 CPU의 모든 코어를 활용해 성능을 최적화
멀티스레드 예제
멀티스레드를 활용하면 별도의 스레드를 생성해서 독립적인 작업을 실행하는 것이 가능하다.
Task.Run(() =>
{
Console.WriteLine("This is running on a separate thread!");
});
쓰레드 풀(Thread Pool)
쓰레드 풀은 미리 생성된 스레드 집합으로, 작업을 효율적으로 처리하기 위해 스레드를 재사용한다.
이는 스레드를 생성하는데 드는 자원량이 크기 때문에 미리 만들어두고 이를 재사용하기 위함이다.
- 스레드 생성 비용 절감 : 스레드를 새로 생성하는 오버헤드를 줄이고, 미리 생성된 스레드 사용
- 효율적인 리소스 관리 : 동시에 실행 가능한 스레드 수를 제한하여 CPU와 메모리 사용을 최적화
- 자동 조절 : 쓰레드 풀이 현재 시스템의 부하에 따라 스레드 수를 자동으로 조절
- 확장성 : 대규모 애플리케이션에서 많은 요청을 처리할 때 성능 저하를 최소화
쓰레드 풀 예제
ThreadPool.QueueUserWorkItem(state =>
{
Console.WriteLine("Task executed by ThreadPool.");
});
비동기, 멀티스레드, 쓰레드 풀 정리
함께 읽으면 좋은 글
'프로그래밍' 카테고리의 다른 글
도메인 주도 개발(Domain-Driven Development) 모델과 모델링 (1) | 2024.11.20 |
---|---|
/**/* 은 무슨 뜻일까? Glob 패턴에 대해서 알아보자 (1) | 2024.10.23 |
PowerShell 에러 Invoke-WebRequest : 기본 연결이 닫혔습니다. SSL/TLS 보안 채널에 대한 트러스트 관계를 설정할 수 없습니다. (0) | 2024.09.27 |
PowerShell의 Invoke-WebRequest로 Post Request 보내기 (1) | 2024.09.27 |
DTO란? DTO에 대해서 알아보자 (1) | 2024.09.11 |
댓글