티스토리 뷰

개발/코더 탈출

[용어] PROCESS & THREAD

-=HaeJuK=- 2024. 2. 4. 19:19
반응형

프로세스(Process)와 쓰레드(Thread)는 둘 다 동시에 여러 작업을 수행하는데 사용되는 개념이지만, 몇 가지 중요한 차이점이 있습니다.

  1. 독립성:
    • 프로세스: 각 프로세스는 독립된 메모리 공간을 가지며, 한 프로세스의 오류가 다른 프로세스에 영향을 미치지 않습니다. 각 프로세스는 운영체제에 의해 별도로 관리됩니다.
    • 쓰레드: 쓰레드는 프로세스 내에서 실행되는 여러 실행 흐름으로, 같은 프로세스 내의 쓰레드들은 같은 메모리 공간을 공유합니다. 따라서 쓰레드 간에는 데이터를 쉽게 공유할 수 있습니다.
  2. 자원 사용:
    • 프로세스: 각 프로세스는 운영체제로부터 독립적인 자원을 할당받습니다. 이로 인해 프로세스 간 통신이나 데이터 공유에는 별도의 메커니즘이 필요합니다.
    • 쓰레드: 쓰레드는 같은 프로세스 내의 다른 쓰레드와 자원을 공유하기 때문에, 데이터 공유와 통신이 간단합니다.
  3. 생성 및 종료 오버헤드:
    • 프로세스: 프로세스의 생성 및 종료는 상대적으로 오버헤드가 큽니다. 각 프로세스는 독립적인 실행 환경을 가지므로 운영체제에서 많은 자원을 할당하고 관리해야 합니다.
    • 쓰레드: 쓰레드는 같은 프로세스 내에서 생성되기 때문에 프로세스보다 더 빠르게 생성 및 종료됩니다. 쓰레드 간 전환도 프로세스 간 전환보다 더 빠릅니다.
  4. 통신 및 동기화:
    • 프로세스: 프로세스 간 통신(IPC) 및 동기화는 별도의 메커니즘을 사용해야 합니다.
    • 쓰레드: 쓰레드는 같은 프로세스 내에서 공유 메모리를 사용하므로, 데이터 공유와 동기화가 비교적 간단합니다.

쓰레드는 경량 프로세스로 간주되며, 프로세스보다 자원 사용이 효율적입니다. 그러나 쓰레드 사용 시 주의해야 할 동기화 문제와 예기치 못한 동작에 대한 주의가 필요합니다. 선택은 애플리케이션의 요구 사항과 설계 목표에 따라 다르게 될 것입니다.

프로세스 동기화는 여러 프로세스나 스레드가 공유 자원에 접근할 때 발생할 수 있는 문제를 해결하기 위한 기술입니다. 공유 자원에 대한 동시 접근은 경쟁 조건, 교착상태, 데드락 등의 문제를 초래할 수 있으므로, 이러한 문제들을 해결하고 조절하기 위해 프로세스 동기화가 필요합니다.

프로세스 동기화를 위한 주요 기술과 개념은 다음과 같습니다:

  1. 상호배제(Mutual Exclusion): 공유 자원에 대한 동시 접근을 막기 위해 한 프로세스나 쓰레드가 공유 자원을 사용 중일 때, 다른 프로세스나 쓰레드는 해당 자원에 접근할 수 없도록 해야 합니다. 이를 상호배제라고 합니다.
  2. 임계 영역(Critical Section): 상호배제를 적용해야 하는 코드 영역을 임계 영역이라고 합니다. 임계 영역은 한 번에 하나의 프로세스나 스레드만 접근할 수 있어야 합니다.
  3. 세마포어(Semaphore): 세마포어는 상호배제를 구현하는 동기화 도구 중 하나로, 정수 변수를 사용하여 동시에 접근할 수 있는 허용된 프로세스나 스레드의 수를 제어합니다. 이를 통해 임계 영역의 접근을 제한할 수 있습니다.
  4. 뮤텍스(Mutex): 뮤텍스는 락(lock)이라고도 불리며, 상호배제를 위한 동기화 도구 중 하나입니다. 뮤텍스를 소유한 프로세스나 스레드만이 임계 영역에 접근할 수 있도록 합니다.
  5. 조건 변수(Condition Variable): 조건 변수는 프로세스나 스레드가 특정 조건을 기다릴 때 사용됩니다. 조건이 충족되면 시그널을 보내어 다른 프로세스나 스레드를 깨우고 계속 진행하게 합니다.

프로세스 동기화는 잘못 구현하면 교착상태(Deadlock), 경쟁 조건(Race Condition) 등의 문제를 발생시킬 수 있으므로 신중하게 처리해야 합니다. 이러한 기술들을 적절히 조합하여 안전하고 효율적인 동기화를 구현하는 것이 중요합니다.

 

스레드 동기화는 멀티스레딩 환경에서 여러 스레드가 공유 자원에 안전하게 접근하도록 보장하는 기술입니다. 여러 스레드가 동시에 공유 자원에 접근하면서 발생할 수 있는 문제점들을 해결하기 위해 스레드 간의 조정 및 통제를 수행하는 것이 목적입니다. 주요한 스레드 동기화 기법과 개념은 다음과 같습니다:

  1. 뮤텍스 (Mutex):
    • 뮤텍스는 Mutual Exclusion의 약자로, 상호배제를 제공하는 동기화 도구입니다. 뮤텍스는 임계 영역(Critical Section)에 진입할 때 잠금(lock)을 얻고, 나갈 때 잠금을 해제합니다. 이를 통해 한 번에 하나의 스레드만이 임계 영역에 접근할 수 있도록 보장합니다.
  2. 세마포어 (Semaphore):
    • 세마포어는 정수 변수를 사용하여 여러 스레드 간의 동기화를 달성하는 데 사용됩니다. 세마포어 값은 동시에 접근할 수 있는 허용된 스레드의 수를 나타냅니다.
  3. 조건 변수 (Condition Variable):
    • 조건 변수는 스레드가 특정 조건을 기다리게 할 때 사용됩니다. 스레드가 조건을 충족할 때까지 대기하고, 다른 스레드가 조건을 만족시켰을 때 시그널을 보내고 깨워줍니다.
  4. 경쟁 조건 방지:
    • 경쟁 조건(Race Condition)은 여러 스레드가 동시에 공유 자원에 접근하여 예상치 못한 결과가 발생하는 상황을 의미합니다. 동기화 기법을 사용하여 경쟁 조건을 방지하고 데이터의 일관성을 유지합니다.
  5. 원자성(Atomicity):
    • 원자성은 연산이 불분할하게 실행되는 특성을 나타내며, 원자적 연산을 사용하여 여러 스레드 간의 일관성을 유지할 수 있습니다. 예를 들어, 원자적 증가 연산을 사용하여 카운터 값을 안전하게 증가시킬 수 있습니다.

스레드 동기화는 잘못 구현하면 데드락, 교착상태 등의 문제를 초래할 수 있으므로 주의가 필요합니다. 적절한 동기화 기법을 선택하고 사용하여 멀티스레드 환경에서 안전하고 효율적인 동작을 보장하는 것이 중요합니다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함