서버 공부/게임서버프로그래밍 교과서

1장 멀티 스레딩(교착상태, 잠금순서의 규칙, 병렬성과 시리얼 병목)

재우이 2022. 3. 14. 00:41

1.7 교착 상태

교착상태란?

- 두 스레드가 서로를 기다리는 상황을 의미

- 스레드1은 스레드2가 끝나길 기다리고 스레드2는 스레드1이 끝나기를 기다려 멈춰있는 상황

 

교착상태가 되면 발생하는 현상

1. CPU 사용량이 현저히 낮거나 0%. 동시 접속자 수와 상관없다.

2. 클라이언트가 서버를 이용할 수  없습니다. 서버에 요청을 보내도 응답을 받지 못한다.

 

1.8 잠금 순서의 규칙

여러 뮤텍스를 사용할 때 교착 상태를 예방하려면?

- 각 뮤텍스의 잠금 순서를 먼저 그래프로 그려두어야한다.

- 잠금 순서 그래프를 보면서 거꾸로 잠근 것이 없는지 체크해야한다.

ex) a->b->c 로 잠금을 한다면?

a->b->c  //잠금 순서를 지켰으므로 가능

b->c      //a를 잠금하지 않아도 순서가 맞으므로 가능

a->c      //b를 건너 뛰어도 순서가 맞으므로 가능

b          //b만 잠금을 해도 가능

결론

역순으로 잠그지만 않으면 가능하다.

 

재귀 뮤텍스

- 한 스레드가 뮤텍스를 여러 번 반복해서 잠그는 것

- 스레드1을 두번 잠금할 경우 두번 해제해줘야 한다.

- 첫 번째 잠금의 순서가 맞다면 두 번째 잠금의 순서는 지키지않아도 교착상태가 일어나지않는다.

 

1.9 병렬성과 시리얼 병목

병렬성

- 여러 CPU가 각 스레드의 연산을 실행하여 동시 처리량을 올리는 것

시리얼 병목

- 병렬로 실행되는 프로그램이 한 CPU만 연산을 수행하는 현상

암달의 법칙, 암달의 저주

- 시리얼 병목이 있을 때 CPU 개수가 많을수록 총 처리 효율성이 떨어지는 현상