학관 식당 줄서기로 알아보는 효율성 : 병목(Bottle Neck)과 고착(Dead Lock)
여탕 관련 개드립에서 학관에서 밥을 수령하고 앉아서 밥 먹으면 되지 왜 자리 맡아두고 밥을 먹는지 모르겠다. 라는 게이랑 효율성에 대하여 이야기 하던중
10여년전 운영체제(OS) 관련 수업중 교수가 병목과 고착에 대한 부분을 저 학관에서 자리를 맡아두고 밥을 먹는게 효율적이다 라는 부분을 빗대어 설명한게 생각나서 써 봄.
OS의 자원(Resource : CPU, RAM, 하드디스크 등등)을 효율적으로 관리하는 법이기도 하고 경제학에서 사용되는 방법이기도 해.
아래 천천히 Step-by-Step으로 설명할께
사전에 알아둘 정보가 있어.
그림과 같이 식당에서 줄서서 밥을 받고 자리가 날때까지 기다린 다음 밥을 먹는 것이야.
단계별로 요약해서 [대기] - [배식트레이] - [식사대기] - [식사중] - [식사끝]으로 단계를 간략화 할꺼야.
각 단계로 넘어가는 이동시간은 없다고 보고 Step by Step으로 보자.
[병목(Bottel Neck)]
Output을 넘는 Input으로 인해 한 지점에 대기수요가 몰리는 현상. (ex 고속도로 정체, 러시아워)
* 조건 #1 - 이상적(Ideal)
일단 가장 이상적(Ideal)인 상태는 밥을 받자 마자 앉아서 밥 먹고 나가는 것이야.
배식이 한 단계에서 10명이 배식이 가능하고 식사 할 수 있는 자리가 10명이면 먹고 바로 나가는 방법이야.
우리가 알고 있는 학관에서 밥 먹고 나오는 것이지, 효율성이 최대화 되는 시점이야. 최대 10명이 받고 바로 밥을 먹을 수 있는 것이야.
자, 병목을 한번 일으켜보자.
식사 최대인원을 줄이면 한눈에 안 보이니 배식하는 최대 인원을 늘려보자.
(사실 밥 먹는 시간이 20분이면 밥 타는데 5분도 안 걸리니 단위 시간당으로 보면 이게 맞긴하다)
* 조건 #2 - 낮은 수준 병목
배식하는 최대 인원이 20명이 된다고 보자.
최초 배식을 20명이 탔어. 하지만 식사 가능한 사람이 10명이니 나머지 10명은 한템포를 기다려야해. 다음 단계로 넘어가면 기존에 기다린 10명은 식사를 하겠지만 방금 배식을 받은 사람은 또 기다려야 해.
위와 같이 전개가 되면 맨 마지막 사람은 총 2스텝을 기다려야 해.
위와 같을 경우 총 4스텝(1 + 1 + 2)의 병목 현상을 일으키게 되지.
여기서 스텝이라는 것은 밥을 받고 자리가 없어서 서서 기다리는 것이라고 보면 된다. 팔 아프고 지겹고 밥은 식어가는 그러한 비용(Cost)로 보면 돼.
* 조건 #3 - 높은 수준 병목
배식하는 최대 인원이 30명이 된다고 보자.
이번에는 대기가 10명, 배식을 30명을 받게 되지. 똑같은 방법으로 전개하면 총 5스텝( 1 + 2 + 2)의 병목이 발생해.
즉, 한 스텝내에 최대 배식이 가능한 수가 늘어날때 대기하는 사람들 고생은 늘어난다고 할 수 있어. 그 비용(Cost)는 고스란히 사용자들에게 전가가 되는 거야.
[교착(Dead Lock)]
서로 상호간의 작업이 끝나기를 바라는 상태로 두개의 작업이 서로 끝나지 못하고 있는 상태를 말한다. (ex - 전진만 하는 두 염소의 외나무 다리 건너기)
앞서 말한 학관과 엄밀히 말하면 교착 분류에 들지는 않지만 교착의 연쇄화를 설명하기 위해서 무리하게 적용 해 볼께
교착을 강하게 일으켜 보자.
배식이 40명이 가능한 상황에서 식판이 40개 밖에 없다면?
그리고 사람들이 몰려서 40명이 아닌 80명이 기다린다면?
스텝3이 되면 위와 같은 상태가 된다.
10명이 밥을 먹을 동안 30명이 밥을 타고 기다리고 있어.
식판이 40개 밖에 없으니 배식을 못 해서 40명은 밥도 못 받고 기다려야 해.
다음 단계가 되어 10명이 밥을 먹었으니 식판이 10개가 새로 생겼어.
대기중인 사람 10명은 배식이 가능해.
뭔가 이상하지?
맞아. 배식이 총 40명이 가능한데 처리량이 적은 식사하는 사람들 때문에 배식 자체가 느려지게 되는거야. 이러한 프로세스간에 한쪽에 병목이 심화되서 발생하면 그 여파가 앞선 배식까지 영향을 미치게 되는 것이야.
이러한 부분을 교착화되고 있다고 해. (엄연히 말하면 교착화 보다는 병목의 심화에 가깝지만 그려려니 했으면 해)
여기서 가장 문제는 밥을 받고 대기하는 저 단계가 문제인 부분이야.
식판도 쓰고 각 학생들은 밥을 들고 서 있어야 하니 고역인 부분이지.
자, 이제 병목과 교착을 해결할 방법을 찾아보자.
첫번째 드는 자연스러운 생각이 있지?
바로 번호표를 받고 기다리다가 자기 차례가 되면 밥을 타서 먹는 것이야.
(일반적인 맛집에서 하는 줄서서 자리잡고 밥먹기이지)
이 경우 맨처음에 줄서서 대기하는 사람이 상대적으로 증가하게 돼. 한번에 식사 할 수 있는 사람이 10명이니까. 하지만, 밥을 식판에 타서 들고 있는 사람이 0명이라 밥만 타면 바로 밥을 먹을 수가 있어.
위경우 번호표를 주기 위해서는 10명의 좌석 관리가 핵심이 되어.
두번째로는 자리를 먼저 잡고 밥을 주문하는 것이야.
보통 카페나 백화점 푸드코트 가면 자주 듣는 이야기 있지?
"자리 먼저 맡으셨나요?"
맞아, 일행이 있어서 밥 먹는 수요가 1~XX명이 되면 식당측에서 관리가 안 되니 대기자들 보고 알아서 자리를 잡고 오라는 것이야.
이 경우 자리를 잡고 밥을 타러 오는 2스텝의 손실이 불가피 해.
자리를 맡고 다시 주문하는 사이에 10명이 밥을 먹을 수 있으니까.
보통 앞선 밥을 수령후 알아서 자리를 잡고 먹는게 낫다는 사람들이 이해를 못 하는 부분이기도 해.
하지만, 여기에 추가된 조건을 보면 일행(1~XX명)이 있을 경우라는 전제조건이 추가 되었지.
앞선, 조건에서는 이러한 부분을 고려 안 했지만 현실에 맞게 하기 위해 추가를 하였어.
다소 비효율이 보이지만 더 복잡한 조건을 만족하기 위해서 사용하는 방법이야.
다양한 수요(식판수, 좌석수)를 컨트롤 하기 힘드니 사용자들에게 그만큼의 공간을 먼저 확보한 사람에게 배식을 한다는 내용이야.
준비 시간(배식)은 짧은데 실행 시간(식사)이 길고 제한된 자원(식판)이 있는 경우 병목 현상을 방지하기 위한 효율적인 방법이야.
긴 글 쉽게 쓰려고 했는데 역시나 재미가 없네.
암튼, 사회생활에 어떻게 효율적으로 되는 것인지 시뮬레이션하고 그 결론을 이야기 해 봤어.
일상의 다양한 문화현상을 이해하길 바래.
요약 :
1. INPUT(배식)이 빠르고 OUTPUT(식사)가 느릴 경우, 사람이 몰리면 병목이 발생한다.
2. 병목현상중 자원(식판)이 제한 될 경우 자원을 소유한 사람(밥 타고 기다리는 사람)으로 인해 전체적인 효율성이 저하된다.
3. 병목과 교착을 없애기 위해 다양한 방법(대기표, 자리잡고 밥타기)이 사용된다.
결론 :
대기표, 자리잡고 밥타기는 병목과 교착을 해결하는 한 방법이다.
P.S : 개드립간, 여탕 논란에 대하여 때 불리는데 5분, 씻는데 1시간(60분)일 경우 어떻게 하면 병목과 교착을 없애는 것인지 적용 해 봤으면 해.
14개의 댓글
무분별한 사용은 차단될 수 있습니다.
감자깡
승무원지시에불응하는자
목욕탕에서는 푸드코트처럼 내부인원현황에 맞춰서 유입인원을 조절해줄 사람이 있기 힘든데다가
자리 순서를 결정하는 번호표..? 몸 불리고 있는 사람한테 하나씩 주면 되는건가.. 세신사 아줌마들은 자체적으로 번호표 만들어서 쓰고있다고는 하는데 자리에 어떻게 적용시켜야할지는..
보라뚱이
JMS
쌈쌈쌈
무리해서 자원(식판)부족을 했더니 좀 설명이 부족했는데
어랏
어랏
내가 요구하는점이 있으면, 누군가도 나한테 요구하는게 있어야 한다는건데, 사진에서도 나타나지만 위의 상황은 절대로 요구조건이 순환되지 않지.
쌈쌈쌈
노농
식당처럼 지속적인 점유가 아니고 잠깐 점유해서 사용하는 공유자원을 혼자서 계속 점유해서 사용하려는 문제로 인식해야할거 같은데
짱이닭
8컷
갸가 자리 잡을 동안 밥 받고 이제 자리 잡고 먹기 시작할 놈들이 자리가 없어 뽈뽈거리며 돌아다닐텐데 그 시간 때문에 오히려 악화될거구만
호봉 개드리퍼
나눌수없는것
꺄울
프러그램 뭐더라
마소꺼였던거 같은디