동기와 비동기방식이란?


동기 synchronous : 동시에 일어나는 이란 뜻으로 요청과 결과가 동시에 일어남 (요청과 결과가 동시에 일어나야하기에 중간에 대기시간이 있움-느림)

-> 생활 속의 예로, 설거지-집안청소-빨래라는 3가지 할 일이 있다.

설거지가 끝나고 나면 집안청소를 하고, 집안청소를 끝나면 빨래를 함

각 업무의 예상소요시간을 1시간씩 잡아도 3가지를 다 하면 3시간이 지나있음.

가장 생각하기 쉬운 방법이지만, 할 일이 많아지면 점점 소요시간(누군가가 나를 기다리는 입장에선 대기시간)이 길어지는 단점이 있음.

[설계가 간단하고 매우 직관적 / 대기시간이 길어질 수 있는 단점 ]


동기방식으로 이메일 바로행하는 프로그램 

-> 만명에게 이메일 보내면 한명, 한명, 한명



비동기 Asynchronous : 동시에 일어나지 않는 뜻으로 요청부터 하고 결과는 동시에 일어나지 않는다는 뜻으로 보면 됌 

Non-blocking input/output

-> 동기식의 예를 들 때와 마찬가지로 설거지, 집안청소, 빨래라는 3가지 할 일이 있을 때

설거지하는 업체에 전화를 해서 설거지를 부탁하면서 끝나면 전화하라고 당부함

집안청소, 빨래까지 각 업체에도 같은 내용으로 통화를 함

3시간이 걸리지도 않은 채 3가지 일을 '시작'했다고 볼 수 있어서 일처리가 동기보다 상대적으로 빠른 편..

하지만 언제 끝날지는 알 수 없음.! 그래도, 동기보단 세가지 일이 병렬적으로 해결이 가능하다.

[맡겨야 하는 과정들이 조금 복잡하지만 / 결과가 주어지는 그 사이 시간 및 자원을 효율적으로 쓸 수 있음]


=> 업무를 볼 때에도 한사람이 4가지 일을 첫번째 끝내놓고 두번째, 두번째 끝내놓고 세번째 해결하는 것보단

한사람이 4가지 일 중 첫번째를 남한테 맡겨서 스타트를 끊어놓고 두번째를 자기가 하고 있는게 일이 처리되는 효율성은 훨씬 높음


비동기방식으로 이메일 발행

-> 이메일 보내는 별도 시스템에게 만명에게 이메일 보내라는걸 하면!

우선 사용자에겐 사용자에게 전송을 완료했습니다. 메세지 보냄

(전송 시작됐다는 메세지 나오고 뒤에서 이메일을 보내는 중...)



* 우체국에 비유

 - 외부직원 : 싱글쓰레드

 - 손님 : 개별 유저

 - 동기 : 외부직원이 처리할 때까지 손님이 기다림

 - 비동기 : 순번을 예약해놓고, 자신의 차례가 되면 와서 처리, 기다리지 않음.


1. 싱글쓰레드 & 동기


 - 하나의 우체국에 한 명의 직원, 즉 손님1 이 짐을 처리할 때까지, 손님 2,3,4 는 기다려야합니다.

   손님1의 처리가 끝난 뒤, 손님2의 짐을 처리할 수 있습니다. 이게 싱글쓰레드 - 동기 처리입니다.

   따라서 손님 하나를 받는동안 나머지 손님들은 기다리기만 해야합니다. 


2. 멀티쓰레드 & 동기


 - 우체국을 손님수만큼 만든다. 손님이 1000명이라면 우체국을 1000명 만들고, 손님1의 짐은 우체국1이

   손님2의 짐은 우체국2가 처리한다고 한다.  손님들은 기다리지 않아도 되지만, 우체국이 쓸데없이 너무 

   많아지게 된다. 즉 성능이 안 좋아진다. 이 방식이 기존 웹서버의 처리방식이였습니다.


3. 싱글쓰레드 & 비동기


 - 우체국은 1개이나, 손님1이 예약을 하고 집에가서 기다리는 방식. 각 손님2, 3, 4... 들도 예약을 하고, 

   우체국은 각 손님들의 우편이 도착하면, 각 손님들에게 알려주고, 손님들은 기다리지 않고, 바로 자신의  

   짐을 처리할 수 있다. 기술적으로 이런 방식을 멀티플렉싱이라고 합니다.


4. 멀티쓰레드 & 비동기


 - 이 방식은 각 우체국을 손님 수만큼 늘리는 것이 아니라, 위의 싱글쓰레드-비동기 방식에서 처리하는 방식의

   우체국을 10개정도만 늘려서 우체국이 비동기로 처리하는 방식입니다. 기술적으로 상황에 따라 cpu갯수 * 1~4

   퍼포먼스가 가장 잘나옴.


참고하기 좋은 사이트들

① http://hamait.tistory.com/694 (동기와 비동기의 우체국 예)

② https://private.tistory.com/24 (동기와 비동기의 은행 예)

'개발일기' 카테고리의 다른 글

깃허브 사전  (0) 2019.03.11
2019년 커리어 목표 차근차근 세워보기  (0) 2019.03.02

+ Recent posts