반응형
Q1. 락의 구현 방법을 3가지로 나눠보고, 비행기 화장실에 비유하여 설명해 보세요.
락이 어떻게 동작하는지 알아야 해.
일단 이론으로 보자.
단점은 들어간 사람 안나오면 시간 낭비
자리 돌아가자마자 화장실에서 나오거나 비자마자 다른 사람이 들어가면 더 오래걸릴 수 있어.
시간을 효율적으로 활용할 수도 있지만 렌덤이야.
직원에게 망 보게 하는거
통보 받고 화장실 가면 깔끔하게 된다. 하지만 직원 입장에서는 부담이 된다.
이렇게 3가지 방법을 알아봤는데 구현할 때도 똑같다.
- 존버 메타 : 스핀락, 계속 뺑뺑이 돌면서 나오나 체크하는 거. 안에 있는 애 안나오면 허탕. 컴퓨터 입장에서느 대기 한다는 건 빙의해서 스레드를 계속 실행 시키는 거 가변운 작업 아냐. 무한루프 도는 거라 CPU 점유율 올라간다. 계속 체크하는 것이기 때문이야.
- 랜덤 메타 : 스레드가 자기 소유권을 포기하는 거. Thread.Sleep(0)을 해도 되고 yield를 해도 된다. 소유권을 포기하고 있다가 나를 실행시켜줘 라고 스스로 포기를 하는 거. 원래 스레드를 얼마나 실행할지 시간을 줄거야. 시간 다 쓰면 회수해서 다른 애를 움직이게 하는건데 시간을 다 사용하지 않더라도 돌려주는 거. 무작정 기다리는 게 아니라 왔다 갔다 하는 거 context swithing이라는 개념 사용할건데 소유권을 놔줘서 스레드가 다른애를 실행시키러 옮겨 다닐건데 옮겨가는 작업도 부담이 크다. 쉬다 왔는데 다른애가 차지할 수 있다는 문제 있어.
- 갑질 메타 : 이벤트 방식으로 역으로 통보를 받게 되는 개념. 잠들고 소유권을 양도하겠다. 다른 애를 실행ㅎ시키러 가라까지는 비슷해. 다만 렌덤으로 하는게 아니라 커널(운영체제)에다가 부탁을 하는 거 어떤 이벤트 세팅해서 자물쇠 비면 이벤트 발생시켜줘라고 예약.
왔다 갔다하는 건 비슷한데 깨어나는게 달라.
이걸 하나씩 구현하면서 락의 이해 높히고, 멀티스레드 코딩 연습도 해볼겸 구현해 볼거야.
반응형
'Server programming' 카테고리의 다른 글
01_11_멀티쓰레드_ContextSwitching (0) | 2023.03.15 |
---|---|
01_10_멀티쓰레드_SpinLock (0) | 2023.03.15 |
01_08_멀티쓰레드_DeadLock (0) | 2023.03.14 |
01_07_멀티쓰레드_Lock 기초 (0) | 2023.03.13 |
01_06_멀티쓰레드_Interlocked (0) | 2023.03.13 |
댓글