Process vs Thread ( + Deadlock)

Kim Dong Kyun·2023년 3월 31일
0
post-custom-banner

1. 프로세스(Process) : 지주

지주는 소유한 땅으로부터 수입을 얻는 사람으로, 여러 땅을 소유하고 각각의 땅에서 수입을 얻는 것처럼, 프로세스도 운영체제에서 독립적으로 실행되며 각각의 프로세스는 자신만의 자원과 메모리 공간을 가지고 있습니다. 따라서, 다른 프로세스와 독립적으로 실행되며, 서로 직접적으로 접근할 수 없습니다.

  • 운영체제에서 독립적으로 실행
  • 각각의 프로세스는 자신만의 자원과 메모리 공간을 가지고 있습니다
  • 서로 직접적으로 접근할 수 없습니다.

2. 스레드(Thread) : 농노

농노는 지주의 땅에서 농사를 짓고 살면서, 지주와 함께 자원을 공유하고 지주가 주도하는 방향으로 일합니다. 마찬가지로, 스레드는 하나의 프로세스 내에서 독립적으로 실행되는 작은 실행 단위입니다. 스레드는 프로세스의 자원(메모리, 파일 디스크립터 등)을 공유하며, 다른 스레드와 함께 프로세스 내에서 주어진 일을 수행합니다. 따라서, 프로세스와 스레드는 서로 다른 수준의 자원 공유와 독립성을 가지고 있습니다.

  • 스레드는 하나의 프로세스 내에서 독립적으로 실행되는 작은 실행 단위
  • 프로세스의 자원(메모리, 파일 디스크립터 등)을 공유
  • 다른 스레드와 함께 프로세스 내에서 주어진 일을 수행

3. Deadlock

데드락(Deadlock)은 멀티프로세스/스레드 환경에서 두 개 이상의 프로세스/스레드가 서로가 가진 자원을 점유하고 있어 상대방의 자원을 기다리는 상황에서 아무 일도 진행되지 않는 상태를 말합니다.

발생 조건

데드락이 발생하려면 다음 네 가지 조건이 모두 충족되어야 합니다.

    1. 상호배제(Mutual Exclusion)

한 자원은 한 번에 하나의 프로세스/스레드만 사용할 수 있어야 합니다.

  • 점유와 대기(Hold and Wait)

적어도 하나의 자원을 점유하고 있는 프로세스/스레드가 다른 자원을 요청하고 대기하고 있어야 합니다.

  • 비선점(No Preemption)

다른 프로세스/스레드가 가진 자원을 강제로 빼앗을 수 없습니다.

  • 순환 대기(Circular Wait)

프로세스/스레드들 사이에 자원을 요청하는 순환 대기 구조가 형성되어야 합니다.

해결 방법

1. 예방(Prevention)

  • 자원 요청에 대한 우선순위를 정하거나, 자원 사용 시간을 제한하는 등의 방법으로 데드락 상황을 방지합니다.

2. 회피(Avoidance)

  • 프로세스가 자원을 요청할 때 해당 자원을 점유하고 있을 때 데드락이 발생하지 않도록 요청을 거부하는 등의 방법으로 회피합니다.

3. 탐지(Detection)

  • 프로세스 간의 자원 요청 및 사용 상황을 모니터링하여 데드락이 발생할 경우에 대한 대처를 취하는 방법입니다.

4. 복구(Recovery)

데드락이 발생하면 해당 상황을 해결하기 위해 자원을 해제하거나, 데드락 상태에서 벗어나기 위한 작업을 수행하는 등의 방법으로 복구합니다.


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

멀티 스레드는 멀티 프로세스와 비교해서 다음과 같은 장점을 가지고 있습니다.

멀티 스레드 장점

  • 적은 메모리 사용

멀티 프로세스는 각각 독립된 메모리 영역을 사용하기 때문에 많은 메모리를 사용합니다. 반면 멀티 스레드는 스레드 간 데이터를 공유하기 때문에 메모리 사용이 적습니다.

  • 빠른 컨텍스트 스위칭

멀티 프로세스에서는 컨텍스트 스위칭이 느릴 수 있습니다. 하지만 멀티 스레드에서는 스레드 간 전환 시 스택 메모리만 변경하면 되기 때문에 빠릅니다.

  • 자원 공유

멀티 스레드에서는 스레드 간 데이터를 공유할 수 있습니다. 이는 멀티 프로세스보다 효율적인 자원 공유를 가능하게 합니다.

멀티 스레드 단점

  • 동기화

멀티 스레드에서 여러 스레드가 동시에 접근하는 공유 데이터를 제대로 관리하지 않으면 예기치 못한 결과를 초래할 수 있습니다.

  • 성능 저하

멀티 스레드에서는 스레드 간 경쟁이 발생할 수 있으며, 이로 인해 성능이 저하될 수 있습니다. 따라서 스레드 개수를 적절히 조절하는 것이 중요합니다.

post-custom-banner

0개의 댓글