본문 바로가기

개발(합니다)/컴퓨터 일반&CS

[CS] 동기와 비동기 그리고 블럭킹과 넌블럭킹

반응형

개요

크게 시스템을 나누면 요청자와 제공자로 나눌 수 있습니다.
요청을 할 때와 제공을 할 때 어떤 방식으로 되어 있는지에 대해서 논의해야 하는 경우에

동기와 비동기, 블럭킹과 넌블럭킹을 다루어야 합니다.

아래 네 가지 형태로 구성될 수 있습니다.

  • 동기 + 블럭킹
  • 동기 + 넌블럭킹
  • 비동기 + 블럭킹
  • 비동기 + 넌블럭킹

위에 내용처럼 동기 != 블럭킹, 비동기 != 넌블럭킹이 아니라는걸 알 수 있습니다.

REST API는 동기 방식이고 넌블럭킹방식으로 통신으로 하며, frontend와 backend는 대부분 동기 + 넌블럭킹 방식으로 구현합니다.

동기 : Synchronous

그럼처럼 두명이 손을 잡고 있는것처럼 동시에 어떤 일을 하는걸 의미

요청자와 제공자 사이에 지속적으로 Connection을 가지고 있는 상태로 세션을 가지고 통신

  • 요청한 결과가 한 자리에서 동시에 일어나는걸 의미
  • 서로 다른 노드가 작업 처리 단위를 동시에 함
  • 순차적으로 일을 처리

비동기 : Asynchronous

그럼처럼 두명이 각자 일을 하고 있다가 전화라는 이벤트를 통해 서로 통신하는걸 의미

요청자와 제공자 사이에 Connection이 없는 상태로 이벤트를 통해 통신

  • 요청한 결과가 동시에 일어나지 않는걸 의미
  • 서로 다른 노드가 작업 처리 단위를 맞추지 않아 동시에 일어나지 않음
  • 병렬적으로 일을 처리

블럭킹 : Blocking

그림처럼 한명이 다른 사람에게 일을 해달라고 요청하고 요청 받은 사람이 다할 때까지 기다리는걸 의미

요청하고 응답이 올때까지 기다렸다가 응답이 오면 다른일을 하거나 결과를 처리하는 방식

넌블럭킹 : Non-Blocking

그림처럼 요청을 하고 나서 다른 일을 하다가 요청한 일이 끝나면 응답을 받는걸 의미

요청을 하고 다른 일을 하다가 응답이 오면 결과를 읽어서 처리하는 방식

상황별 : 상사와 직원

동기와 블럭킹

상사 : 쿼리 좀 작성해주세요
직원 : 넵. 기다려주세요
직원 : (쿼리 짜는중)
상사 : (쿼리 짜는걸 뒤에서 말 없이 지켜보고 있음)

동기와 넌블럭킹

직원 : 지출결의서 결제 요청드립니다.
상사 : 놓고 가셔서 해야 할 일 하세요.
직원 : 넵. (할 일 하는중)
직원 : 결제하셨나요?
상사 : 아직이요
직원 : 결제하셨나요?
상사 : 아직이요!

비동기와 블럭킹

직원 : 지출결의서 결제 요청드립니다.
상사 : 네. 잠시만 기다려주세요.
직원 : (할 일 많은데..?!)
직원 : (해야 할 일 많은데 결제 요청했다가 할 일 못하고 기다리면서...할 일 생각뿐임)
상사 : (결제 진행중)

비동기와 넌블럭킹

상사 : 쿼리 좀 작성해주세요.
직원 : 넵. 작성하고 말씀드릴게요
상사 : (할일 하는 중)
직원 : (쿼리 짜는 중)
직원 : 쿼리 다 작성했습니다.
상사 : 오킹

반응형