동기와 비동기에 대해서 알아보자!
동기 (Synchronous)
동시에 일어난다는 뜻
요청과 그 결과가 동시에 일어남
시간이 얼마가 걸리던 요청한 자리에서 결과가 주어져야 함
- 요청을 보낸 후 응답(결과)을 받아야지만 다음 동작이 이루어 진다.
- 실제 CPU가 느려지는 것은 아니지만, 시스템의 전체적인 효율이 저하 된다.
- System Call이 끝날때 까지 기다리고 결과물을 가져온다.
비동기 (Asynchronous)
동시에 일어나지 않는다는 뜻
요청과 결과가 동시에 일어나지 않음
요청한 자리에서 결과가 주어지지 않음
- 요청을 보낸 후 응답(결과)와는 상관 없이 다음 방식이 동작하는 방식이다.
- 결과가 주어지는데 시간이 걸리더라도, 그 시간동안 다른 작업을 할수 있다
- 이로 인해 자원을 효율적으로 사용이 가능하다.
- 비동기식 처리를 요청할 때 할일이 끝난 후 처리결과를 알려주는 Call Back 함수를 함께 알려준다.
- 비동기식 처리를 요청하였을 때 호출받은 함수는 바로 응답(확인)을 수행한다.
Blocking 과 Non Blocking
blocking과 non-blocking은 주로 IO의 읽기, 쓰기에서 사용된다.
blocking
- 요청한 작업을 마칠 때까지 계속 대기한다.
- 즉시 return한다.
- return 값을 받아야 끝난다.
- Thread 관점으로 본다면, 요청한 작업을 마칠 때까지 계속 대기하며 return 값을 받을 때까지 한 Thread를 계속 사용/대기 한다.
non-blocking
- 요청한 작업을 즉시 마칠 수 없다면 즉시 return한다.
- 즉시 리턴하지 않는다. (일을 못하게 막는다.)
- Thread 관점으로 본다면, 하나의 Thread가 여러 개의 IO를 처리 가능하다.
[Sync / Async] & [Blocking / Non Blocking]의 차이
Sync / Async & Blocking / Non Blocking은 사실 서로가 비슷해 보이기 마련이다.
이 둘의 차이를 가를 수 있는 것은 관심사가 다르다는 점이다.
Sync / Async
호출되는 함수의 작업 완료 여부를 누가 신경쓰냐가 관심사
호출되는 함수에게 callback을 전달해 호출되는 함수의 작업이 완료
호출되는 함수가 전달받은 callback을 실행
호출한 함수는 작업 완료 여부를 신경쓰지 않는다? 비동기(Async)
호출하는 함수가 호출되는 함수의 작업 완료후 return을 기다림
호출되는 함수로부터 바로 return 받더라도 작업 완료 여부를 호출한 함수 스스로 확인하며 신경 씀! 동기(Sync)
Blocking / Non - Blocking
호출되는 함수가 바로 return하느냐 마느냐가 관심사
호출된 함수가 자신의 작업을 모두 마칠 때까지 제어권을 넘겨주지 않고 대기? blocking
호출된 함수가 바로 return해서 호출한 함수에게 제어권을 넘김
호출한 함수가 다른일을 할 수 있는 기회를 준다면? Non - blocking
예상질문
동기와 비동기의 차이점에 대해서 말해주세요
메소드를 실행시킴과 동시에 반환 값이 기대되는 경우를 동기라고 표현하고, 그렇지 않은 경우는 비동기라고 합니다.
동기는 실행되었을 때 값이 반환되기 전까지는 blocking이 되어있다는 것을 의미합니다.
비동기는 blocking되어 있지 않고 이벤트 큐 또는 스레드에게 해당 태스크를 위임하고 다음 코드를 실행합니다.
동기와 비동기의 장단점에 대해서 말해주세요
동기방식은 설계가 매우 간단하고 직관적이지만 결과가 주어지기 전에는 다른 수행을 하지 못하고 대기해야 합니다.
비동기방식은 복잡하지만 결과를 받을때 까지 대기하지 않고 그 시간동안 다른 작업을 처리하므로 자원을 효율적으로 사용합니다.
Sync Blocking , Sync Non-Blocking, Async Blocking, Async Non-Blocking에 대해서 설명하세요
Sync Blocking : 제어권이 넘어가 있는 상태이며, 결과를 기다리고 받은 이후 즉시 처리 합니다. 중간에 다른일을 하지 못하고 대기해야 한다.
Async Non Blocking : 작업 요청을 받아 별도의 프로세스에서 진행하게 하고, 바로 return후 결과는 간접적으로 callback을 받는다.
Sync Non Blocking : 결과가 생길때까지 계속 완료되었는지 확인을 한다.
Async Blocking : 호출되는 함수가 바로 return하지 않고, 호출하는 함수는 작업 완료 여부를 신경쓰지 않는다.
'CS > 네트워크' 카테고리의 다른 글
웹사이트에 접속할 때 일어나는 상황에 대해서 (0) | 2022.01.15 |
---|---|
쿠키(Cookie) & 세션(Session)의 차이에 대해서 알아보자! (0) | 2022.01.14 |
HTTP(HyperText Transfer Protocol) & HTTPS( +Secure) ??! (0) | 2022.01.12 |
TCP(Transmission Control Protocol) & UDP(User Datagram Protocol)이 뭐야? (0) | 2022.01.11 |
OSI 7 Layer (0) | 2022.01.10 |