Lock구현이론

원래벌레·2022년 4월 10일
0

💎 SpinLock

  • 화장실에 들어간 사람이 나오질 않는데, 이 상황에서 그냥 서서 대기하는 상태가 SpinLock의 형태이다.

  • SpinLock의 경우에는 Context Switching 이 일어나지 않는다.

cf) Cotext Switching : 쓰레드 환경에서 코어는 영혼의 역할을 한다 하였다. 여기서 영혼이 응용프로세스 즉 유저레벨 에서만 돌아가는 줄 아는데, 사실은 아니다. 코어는 O.S 즉 커널레벨 에서도 돌아가게 되는데, 여기서 커널레벨은 쓰레드가 유저레벨에 있는 한 프로세스를 실행하다가 다른 프로세스로 넘어 갈 때, 어디로 넘어갈지를 집어준다거나, cout과 같은 출력문을 받아 하드웨어에 접근한다 할 때 등 많은 상황에서 커널레벨로 돌아가게 된다.

이러한 Context Switching은 결론적으로 서버가 느려지게 한다. 그리고 쓰레드 끼리의 변형이 일어날 때 일어난다.

  • 이 SpinLock의 경우 위에 말한 Context Switching이 없기 때문에, 금방 상대가 화장실에서 나온다라고 생각 할 때, 효율적이게 사용 할 수 있을 것이다.

💎 랜덤메타

  • 화장실에 사람이 있을 때, 일단 자리로 돌아간 후 얼마있다가 다시 돌아오는 구조이다.

  • 이 경우 Context Switching이 일어난다.

  • 하지만 대기 시간이 길어 진다면 이 방법이 SpinLock 보다 효율적 일지 모른다.

💎 갑질메타

  • 화장실에 사람이 있을 때, 직원을 이용하여 화장실이 비게되면 다음 사용자에게 알려 달라는 식의 구조이다.

  • 이 구조 같은 경우에는 일단 직원이라는 또 다른 리소스를 쓰게 된다는 점과, Context Switching이 일어난다는 점이 문제이다.

  • 하지만 이 또한 상황마다 위 상황보다 더 효율적일 수 있고 아닐 수도 있다.

profile
학습한 내용을 담은 블로그 입니다.

0개의 댓글