IT/CS

[OS] 멀티스레딩(Multi-Threading)

KimCookieYa 2023. 5. 29. 00:04

멀티스레딩

멀티스레딩은 컴퓨터 프로그래밍에서 여러 개의 thread를 사용하여 동시에 작업을 수행하는 기술이다. 이를 통해 여러 작업을 동시에 처리하고 병렬성을 이용하여 성능을 향상시킬 수 있다. 멀티스레딩을 구현하기 위해서는 스레드의 생성, 동기화, 스케줄링, 자원 공유 등을 적절하게 관리해야 한다.

멀티스레딩의 이점

  1. 성능 향상: 멀티스레딩은 여러 작업을 동시에 실행함으로써 CPU의 사용률을 높이고 작업을 병렬로 처리함으로써 전체적인 성능을 향상시킬 수 있다.

  2. 응답성 개선: 멀티스레딩을 사용하면 작업을 여러 스레드로 분할하여 동시에 처리할 수 있으므로, 사용자에게 빠른 응답성을 제공할 수 있다.

  3. 자원 공유: 멀티스레딩은 여러 스레드가 공유된 자원에 동시에 접근하고 사용할 수 있도록 해준다. 이를 통해 효율적인 자원 활용이 가능하다.

  4. 모듈화와 유연성: 멀티스레딩은 프로그램을 여러 개의 독립적인 모듈 또는 작업으로 분할할 수 있다. 각 모듈은 별도의 스레드로 실행될 수 있으며, 모듈 간의 상호작용을 통해 유연하고 모듈화된 프로그램을 작성할 수 있다.

멀티스레딩에서의 문제

멀티스레딩 환경에서 발생하는 다양한 문제들이 존재한다. 이러한 문제들은 스레드들이 공유된 자원에 동시에 접근하거나 서로 간섭하는 경우에 발생할 수 있다. 몇 가지 주요한 멀티스레딩 문제들은 다음과 같다.

  1. 경쟁 상태(Race Condition): 경쟁 상태는 두 개 이상의 스레드가 공유된 자원에 접근하여 변경하려고 할 때 발생한다. 이때 스레드들이 서로의 실행 순서에 의존하며, 실행 순서에 따라 결과가 달라지는 문제가 발생할 수 있다.

  2. 교착 상태(Deadlock): 교착 상태는 두 개 이상의 스레드가 서로가 점유한 자원을 기다리며 무한히 대기하는 상태이다. 각 스레드가 상대방이 점유한 자원을 요청하고 대기하면서 상호 간에 진행이 멈추게 되는 문제가 발생한다.

  3. 살아있는 교착 상태(Livelock): Livelock은 각각의 프로세스나 스레드는 작업을 수행하기 위해 다른 프로세스나 스레드에게 양보하려고 시도하지만, 서로가 계속해서 양보하여 아무런 진전이 없는 상태를 말한다. Livelock은 Deadlock과 비슷한 현상이지만, 프로세스나 스레드들이 움직이는 것처럼 보이는 차이가 있다.

  4. 우선순위 역전(Priority Inversion): 우선순위 역전은 우선순위가 낮은 스레드가 우선순위가 높은 스레드가 점유한 자원을 기다리는 상황에서 발생한다. 이로 인해 우선순위가 높은 스레드의 실행이 지연되는 문제가 발생할 수 있다.

  5. 스레드 간 통신과 동기화 문제: 멀티스레드 환경에서 스레드들이 공유된 자원에 안전하게 접근하고 통신하는 것은 도전적인 과제이다. 스레드 간의 동기화 문제, 데이터 일관성 문제, 데드락 등이 발생할 수 있다.

  6. 기아 상태(Starvation): 기아 상태는 특정 스레드가 필요한 자원 또는 CPU 시간을 무한히 기다리는 상태를 말한다. 다른 스레드들이 지속적으로 자원을 점유하거나 높은 우선순위를 가지는 경우, 낮은 우선순위의 스레드는 필요한 자원에 접근하지 못하거나 CPU 시간을 제한적으로 받게 된다.