관리 메뉴

HAMA 블로그

동기,비동기,단일쓰레드,멀티쓰레드 통신 본문

소프트웨어 사색

동기,비동기,단일쓰레드,멀티쓰레드 통신

[하마] 이승현 (wowlsh93@gmail.com) 2016. 11. 8. 23:04


자! 여기 우체국이 있습니다. ( 우체국 내부(OS) 는 알 필요 없고 외부 직원은 싱글쓰레드, 손님은 개별 유저라고 봅시다. )

1. 싱글쓰레드 - 동기 

우체국 하나가 여러 손님을 처리한다고 생각해 봅시다.
손님1 이 짐을 처리할때까지 손님 2 는 기다려야 합니다. 손님 3도 그 뒤에 기다리겠지요.
이게 싱글쓰레드-동기 처리입니다.
손님 1이 짐을 받을 때까지 손님2,3,4,5 는 아무것도 못합니다. 답답합니다..따라서 이 난국을 해결하고자

2. 멀티쓰레드 - 동기 
우체국을 손님 수 만큼 만듭니다. 
이제 손님1 은 우체국 1에서 몬가를 처리하고, 손님2 는 우체국 2에서 처리 한다고 칩시다.
이제 기다리지 않아도 됩니다만.. 먼가 깨림직하죠? 그렇습니다. 우체국을 너무 많이 만들다보니 성능이 망가집니다.
손님이 1000명이면 우체국도 1000개가 되야합니다. 이게 기존의 가장 대중적인 웹서버의 처리 방식이었습니다.

3.싱글쓰레드 - 비동기 
우체국은 1개이나 , 손님1이 티켓을 끊고 집에가서 기다립니다. 손님2 도 티켓 끊고 집에가서 기다립니다. 손님 100까지 모두 그러합니다. 우체국에 손님1의 우편이 도착하면 손님1에게 알려줍니다. 손님1은 우체국에 와서 처리합니다. 그 다음 손님 88에게 먼가가 생기면 알려줘서 처리합니다.네 우체국 1개 가지고 처리가 됩니다. 손님들이 우체국앞에서 하염없이 기다리지 않게 되었습니다. 우체국을 더 지을 필요도 없게 되었습니다. 기술적으로 이런 방식을 멀티플렉싱,Selector 라고 합니다. 
좀 더 기술적으로 들어가서 티켓의 종류는 (쓰기,읽기 등) 이 있는데 쓰기 티켓을 가지고 있는 손님에게는 우체국이 "너 이제 쓸 수 있어"라고 말해주면 손님은 와서 쓰게 됩니다. Reactor 라고 합니다. 일단 쓰고 난 후에 기다렸다가 우체국이 " 니가 쓰라고 했던거 다 썼다" 라고 말해주는것을 proactor라고 합니다. 윈도우에서 IOCP 가 이런 형태 입니다.

4. 멀티쓰레드 - 비동기
이 방식은 우체국을 1000개씩 마구마구 늘리는게 아니라, 위에 싱글쓰레드-비동기에서 처리하는 방식의 우체국을 대략 10개정도만 만들어서 각 우체국이 비동기로 처리하는 방식입니다. 기술적으로 상황에 따라서 cpu 갯수 * 1~4 정도로 잡으면 됩니다.
상식적으로 생각해봐도 가장 성능이 좋겠지요.

마지막으로 그렇다고 모두 멀티쓰레드-비동기로 할 필요는 없습니다. 
때와 상황에 맞춰서 그냥 싱글쓰레드-동기나 멀티쓰레드-동기로 해도 충분할 경우도 많습니다. 쓸 때 없이 복잡해질 필요 없죠.
웹개발에 있어서도 비동기(Reactive) 가 유행하면서 점점 복잡해 지고 있습니다. 우리나라 현실에서 그 파도에 올라타기까지는 꽤 오래 걸리겠지요.


Comments