Post

스레드(Thread)에 알아보자

스레드란?

스레드는 프로세스 내에서 실행되는 독립적인 실행 흐름입니다.
각 스레드는 프로세스의 자원을 공유하면서도, 자신만의 실행 상태(예: 프로그램 카운터, 레지스터 세트, 스택)를 가지고 있어 독립적인 작업을 수행할 수 있습니다.
이를 통해 멀티스레딩, 즉 하나의 프로세스 내에서 여러 스레드가 동시에 실행되는 것이 가능해집니다.


스레드의 주요 특징

  1. 경량성

    스레드는 프로세스보다 훨씬 적은 리소스를 사용하여 생성됩니다.
    이는 스레드가 프로세스의 메모리와 자원을 공유하기 때문이며, 이로 인해 컨텍스트 스위칭의 비용이 줄어들어 효율성이 증가합니다.

  2. 자원 공유

    스레드는 같은 프로세스 내에서 실행되므로, 메모리 데이터, 파일 핸들과 같은 프로세스 자원을 공유할 수 있습니다. 이는 데이터를 공유하고 통신하는 데 있어 프로세스 간 통신(IPC)보다 더 효율적입니다.

  3. 독립적 실행

    각 스레드는 독립적인 실행 경로를 가지고 있어, 다른 스레드의 실행에 영향을 받지 않고 독립적으로 작업을 수행할 수 있습니다.


스레드의 장점

  1. 성능 향상

    멀티스레딩은 여러 작업을 병렬로 처리함으로써 애플리케이션의 처리 속도를 향상시킵니다.
    특히 CPU의 멀티 코어를 활용하는 경우, 각 코어에서 다른 스레드를 실행시켜 성능을 대폭 향상시킬 수 있습니다.

  2. 응답성 향상

    하나의 스레드가 블로킹 작업(예: I/O 작업)을 수행하는 동안, 다른 스레드는 계속해서 사용자 인터페이스를 업데이트하거나 다른 작업을 처리할 수 있습니다. 이는 애플리케이션의 응답성을 크게 향상시킵니다.

  3. 자원 효율적 사용

    스레드를 사용하면 추가적인 프로세스를 생성하지 않고도 여러 작업을 동시에 처리할 수 있습니다.
    이는 시스템 자원을 보다 효율적으로 사용할 수 있게 합니다.


스레드 사용 시 고려사항

  1. 동기화

    스레드 간의 데이터 공유는 동기화 문제를 발생시킬 수 있습니다.
    뮤텍스, 세마포어와 같은 동기화 메커니즘을 사용하여 데이터의 일관성과 정확성을 유지해야 합니다.

  2. 교착 상태

    여러 스레드가 동시에 같은 자원을 요청할 때, 서로가 서로의 작업 완료를 무한히 기다리는 상태인 교착 상태(Deadlock)에 빠질 수 있습니다. 교착 상태를 예방하고 해결하기 위한 전략이 필요합니다.

  3. 리소스 경쟁

    스레드가 동일한 자원에 동시에 접근하려고 할 때 발생하는 리소스 경쟁은 성능 저하를 초래할 수 있습니다. 이를 최소화하기 위해 적절한 동기화 기법을 적용해야 합니다.


멀티 스레드와 멀티 프로세스

  1. 멀티 스레드는 하나의 프로세스 내부에서 여러 개의 스레드가 동시에 실행되는 것이다.
    스레드끼리는 서로의 메모리 공간(thread stack)을 공유하고 접근할 수 있다.
    IPC 통신이 아닌 메모리 기반 통신을 사용하기에 통신 속도가 빠르다.
    각 스레드들은 여러 자원을 공유하기에, 하나의 스레드에 문제가 생기면 나머지 스레드들도 영향을 받을 수 있다.
    프로세스 내에서 스레드의 작업을 여러개로 분할(쪼개서) 병렬로 처리할 수 있다.

  2. 멀티 프로세스는 여러 개의 독립적인 프로세스가 동시에 실행되는 것이다.
    각 프로세스는 독립된 메모리 공간을 가지며, 서로에게 접근하려면 IPC 기법을 사용해야 한다.
    각 프로세스는 각각 고유한 자원을 관리하고 있어 서로에게 영향을 미치지 않는다.
    하나의 프로세스 작업을 여러개로 분할(쪼개서) 병렬로 처리할 수 있다.
    이때, 프로세스는 스레드 단위로 작업을 분할한다.


참고


This post is licensed under CC BY 4.0 by the author.