본문 바로가기
computer science

하루에 하나씩 배우는 컴퓨터 사이언스 개념: 스레드 개념 이해

by vita12321 2023. 8. 7.
728x90
반응형

글에서는 컴퓨터 사이언스 개념을 학습하는 집중하면서 스레드(thread) 개념과 작동 방식에 대해 자세히 알아보겠습니다. 이해를 돕기 위해 스레드의 정의와 작동 방식, 그리고 멀티 스레딩의 장점과 단점을 알아보며 예시를 살펴봅니다.


 

1. 스레드(thread)?

 

스레드(thread) 특정 프로세스 내에서 실행되는 독립적인 작업 단위입니다. 스레드는 해당 프로세스의 메모리 공간, 파일 디스크립터 등과 같은 자원을 공유하며 작동하고, 스레드는 자신만의 레지스터 스택 포인터를 가지게 됩니다. 이렇게 독립적인 실행을 가능하게 하는 스레드 구조는 병렬 처리와 고성능 연산이 필요한 상황에서 높은 효율성을 얻을 있게 합니다.


 

2. 스레드의 작동 방식

 

스레드의 작동 방식은 다음과 같이 크게 가지로 나눌 있습니다.

 

  1. 생성 (Create): 스레드가 새로 생성됩니다. 스레드 생성 과정에서 스레드를 식별할 수 있는 ID가 할당되며, 해당 스레드가 수행할 함수와 인자를 전달합니다.

  2. 실행 (Run): 생성된 스레드는 스케줄러에 의해 실행됩니다. 프로세서가 스레드를 선택하여 실행하게 되면 스레드는 전달받은 함수와 인자를 이용해 작업을 수행하게 됩니다.

  3. 종료 (Terminate): 스레드가 작업을 완료하면 스레드는 종료되고 소멸됩니다. 프로세스가 모든 스레드의 작업을 완료하고 종료되면 해당 프로세스의 메모리 공간과 자원은 운영체제에 반환하게 됩니다.

 

3. 멀티 스레딩(multi-threading) 장점과 단점

 

멀티 스레딩이란 프로세스 내에서 여러 개의 스레드가 동시에 실행되는 기술을 의미합니다. 이렇게 병렬로 작업을 수행할 있는 멀티 스레딩은 다음과 같은 장점과 단점이 있습니다.

 

   1) 장점

  • 효율성: 프로세스가 자원을 공유하기 때문에 자원 사용량이 줄어들며, 대기 시간을 최소화하고 CPU 이용률을 높일 수 있습니다.

  • 성능: 컴퓨팅 능력의 향상을 통해 성능 향상을 꾀할 수 있습니다.

  • 응용 프로그램의 반응성 향상: 사용자 인터페이스와 처리 작업을 독립적으로 수행할 수 있어 응용 프로그램의 반응성이 향상됩니다.

 

   2) 단점

  • 세밀한 동기화 작업 필요: 데이터 동기화와 상호배제(mutual exclusion)를 통해 스레드 간에 일관성을 유지해야 합니다.

  • 디버깅 어려움: 여러 스레드의 동시 실행으로 인해 발생 가능한 경쟁 상황(race condition) 등의 에러를 파악하기 어려울 수 있습니다.

 

4. 스레드에 대한 추가 정보

 

스레드는 프로세스와 유사하게 동작하지만, 코드, 데이터 섹션 열린 파일과 같은 일부 공유 자원을 가지며, 스레드는 스택과 레지스터와 같은 자원이 서로 독립적입니다. 멀티 스레딩은 프로세스보다 스레드를 사용하여 동시성(concurrency) 해결하는 것입니다.

 

  • 스레드 동기화

 멀티 스레딩 환경에서는 공유 자원에 대한 동시 접근으로 인해 경쟁 상황(race condition) 문제가 발생할 있습니다. 이를 해결하기 위해 다양한 동기화 방법(: 세마포어, 뮤텍스, 모니터) 사용됩니다. 동기화 메커니즘을 올바르게 사용하지 않으면 데드락(deadlock)이라는 상태로 이어질 있으며, 프로그램이 이상 진행되지 않게 됩니다. 따라서, 스레드 간의 공유 자원에 접근할 동기화가 필요하다는 점을 명심해야 합니다.

 

  • 스레드 풀

스레드 풀은 여러 스레드로 구성된 집합으로, 작업 처리를 위해 효율적으로 재사용됩니다. 스레드 풀을 사용하면 작업을 직접 할당하고 완료되면 풀로 반환하여 미래 작업에 다시 사용할 있습니다. 이를 통해 스레드를 즉시 생성 제거하는 오버헤드를 줄이고, 과도한 스레드 생성에 따른 성능 저하를 예방할 있습니다.

 

  • 스레드와 가비지 콜렉션

객체 지향 프로그래밍에서는 메모리를 사용한 뒤에 이를 정리하는 과정이 필요합니다. 자바, 파이썬, C# 등의 언어에서는 가비지 콜렉터(garbage collector) 작업을 수행합니다. 스레드 환경에서는 많은 가비지 콜렉터가 스레드에 대한 추적과 관리를 담당합니다. 멀티 스레딩 환경에서 가비지 콜렉션을 이해하고 올바른 동작을 위해 필요한 동기화나 참조 관리를 실시하는 것이 중요합니다.

 

  • 자바스크립트와 웹 워커

웹의 세계에서도 멀티 스레딩과 관련된 지식이 요구됩니다. 예를 들어, 자바스크립트는 기본적으로 단일 스레드 언어로써, 워커(Web Worker) 사용하여 멀티 태스킹 성능을 향상시킬 있습니다. 워커를 사용하면 메인 스레드가 블록되지 않은 상태에서도 복잡한 작업을 병렬로 처리할 있어 클라이언트 측에서 나은 사용자 경험을 제공할 있습니다.

 

 

이와 같이, 스레드 프로그래밍은 광범위한 분야에서 다양한 요구사항을 만족하기 위해 중요한 역할을 담당합니다. 이러한 주제를 학습하면서 멀티 스레딩을 더욱 효율적으로 활용하고 시스템을 설계하는 도움이 되는 능력을 키울 있습니다. 이제 추가로 스레드 동기화, 데드락, 아키텍처 설계, 분산 컴퓨팅 관련 주제를 깊게 탐구해 나가시길 바랍니다.

728x90
반응형