DB

데드락

Raconer 2023. 7. 5. 21:40
728x90

프로세스나 스레드 간에 발생하는 상호 대기 현상으로, 작업의 완료를 기다리며 시스템이 정체되는 현상입니다.

증상:

  • 작업이 진행되지 않고 시스템이 정체되는 상태가 됩니다.
  • 프로세스 또는 스레드 간의 상호작용이 멈추고, 상호 대기 상태가 되는 것을 확인할 수 있습니다.

원인

데드락은 다음과 같은 네 가지 조건이 동시에 성립할 때 발생합니다:

  • 상호 배제(Mutual Exclusion)
    • 자원은 하나의 프로세스 또는 스레드에 의해 동시에 점유될 수 없습니다.
  • 점유와 대기(Hold and Wait)
    • 이미 점유한 자원을 기다리는 상황이 발생합니다.
  • 비선점(Non-preemption)
    • 다른 프로세스 또는 스레드가 이미 점유한 자원을 강제로 빼앗을 수 없습니다.
  • 순환 대기(Circular Wait)
    • 여러 프로세스 또는 스레드가 순환적으로 다음 작업을 기다리는 상황이 발생합니다.

방지 방법

  • 상호 배제 제거
    • 자원의 공유를 허용하거나 상호 배제를 최소화하여 여러 프로세스 또는 스레드가 동시에 접근할 수 있도록 합니다.
  • 점유와 대기 제거
    • 자원을 요청할 때 다른 자원을 점유하지 않고 요청합니다.
  • 비선점 제거
    • 자원을 강제로 빼앗지 않고, 자원을 점유한 프로세스 또는 스레드가 작업을 완료한 후에 자원을 반환하도록 합니다.
  • 순환 대기 제거
    • 자원에 고유한 번호를 할당하고, 번호 순서에 따라 자원을 요청하도록 합니다.
  • 교착 상태 탐지 및 복구
    • 교착 상태가 발생했을 때 이를 탐지하고 복구하는 알고리즘을 구현합니다.
  • 자원 할당 순서 변경
    • 자원을 할당할 때 일정한 순서를 유지하여 교착 상태가 발생할 가능성을 줄입니다.

데드락 방지는 시스템 설계와 애플리케이션 구현 단계에서 고려되어야 하며, 상황에 맞는 방법을 선택하여 적용해야 합니다.

728x90

'DB' 카테고리의 다른 글

Redis 기본 명령어  (0) 2023.08.18
DB 테스트 용 데이터 대량 만들기_TIP  (0) 2023.08.03
MySql DB 엔진  (0) 2023.07.03
DB 격리 수준(ACID > Isolation)  (0) 2023.06.15
Redis란?_Sorted sets  (0) 2023.04.16