AI Briefing

9가지 프로그래밍 언어로 배우는 개념: 5편 - 동시성 프로그래밍

·2023.01.31 09:00

CPU 성능 한계를 극복하기 위한 동시성 프로그래밍의 핵심 개념과 효율적인 쓰레드 활용 방식을 설명한다.

CPU 코어 성능의 한계로 인해 높은 반응성과 성능을 요구하는 프로그램에서 동시성 프로그래밍은 필수적이다.

동시성 프로그래밍을 이해하려면 병렬 처리(Parallel Computing), 멀티쓰레딩(Multithreading), **비동기 프로그래밍(Asynchronous Programming)**의 차이를 구분해야 한다. 병렬 처리가 여러 명령을 동시에 처리하는 것이라면, 동시성은 명령이 불규칙한 순서로 실행될 수 있게 하는 더 넓은 개념이다.

**쓰레드(Thread)**는 명령 흐름을 관리하는 기본 단위지만, 빈번한 생성과 Context Switching은 성능 저하를 유발한다. 이를 방지하기 위해 **쓰레드 풀(Thread Pool)**을 사용하여 쓰레드를 재사용하고 태스크(Task) 단위로 작업을 관리한다.

효율적인 자원 관리를 위해서는 태스크의 성격에 따라 쓰레드 풀을 분리해야 한다:

  • I/O 작업: 하드웨어나 네트워크 응답을 기다리는 작업으로, 쓰레드 개수를 가변적으로 운용해 반응성을 높인다.
  • CPU 작업: 순수 연산이 많은 작업으로, 코어 수에 맞춰 쓰레드 개수를 고정하여 Context Switching을 최소화한다.

태스크가 CPU와 I/O 작업을 모두 포함할 경우, 이를 각각 다른 쓰레드 풀에 할당하도록 쪼개는 것이 효율적이다. 또한, 운영체제 대신 프로그램 레벨에서 관리하여 리소스를 최적화하는 경량쓰레드(Light-weight Thread) 방식도 존재한다.

이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.

요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.