동기/비동기

CH_Hwang·2021년 12월 28일
2

동기와 비동기

  • 작업을 수행하는 주체가 2개 이상일 때
  • 작업 시간(시작, 종료 등)을 서로 맞춘다면 동기,
  • 서로의 작업 시간이 관계 없다면 비동기라고 부른다.

블로킹 논블로킹?

  • 블로킹/논블로킹 은 작업의 대상이 2개 이상일 때

동기

작업을 수행하는 두개 이상의 주체가 서로 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작할 때를 의미

비동기

두 주체가 서로의 시작, 종료시간과는 관계 없이 별도의 수행 시작/종료시간을 가지고 있을 때를 뜻함.

블로킹

자신의 작업을 하다가 다른 작업 주체가 하는 작업의 시작부터 끝까지 기다렸다가 다시 자신의 작업을 시작

논블로킹

다른주체의 작업과 관계없이 자신의 작업을 계속한다면 논블로킹

동기와비동기/블로킹과 논블로킹의 조합

동기 + 블로킹

  • 동기의 조건: 두개 이상의 작업의 시작시간, 종료시간이 같거나 시작과 동시에 종료할 것
  • 블로킹의 조건: 다른 작업을 하는 동안 자신의 작업을 일시정지할 것

  • ex) DB에 쿼리를 날린다. 매소드에서 다른 매소드를 호출하여 결과값을 즉시 받아온다

비동기 + 블로킹

  • 비동기의 조건: 다른 작업과 시작, 종료 시간이 다를 경우
  • 블로킹의 조건: 다른 작업을 하는 동안 자신의 작업을 일시정지할 것

    이 경우 결국 다른 작업이 끝날 때까지 기다려야 하기 때문에 동기+블로킹과 비슷한 작업 효율.

  • ex) 비동기, 논블로킹 작업을 호출하고 자신의 작업을 하던 도중 호출한 작업의 결과 값을 조회하려고 했을 때(블로킹 메서드 실행)

동기 + 논블로킹

  • 동기의 조건 : 두개 이상의 작업의 시작시간, 종료시간이 같거나 시작과 동시에 종료할 것
  • 논블로킹의 조건: 다른 작업의 주체가 작업하는 동안 기다리지 않아도 됨.

이 경우에 다른 작업과의 동기를 위해 계속해서 작업이 끝났는지 조회하는 polling을 구현해야함

비동기 + 논블로킹

  • 비동기의 조건: 다른 작업과 시작, 종료 시간이 다를 경우
  • 논블로킹의 조건: 다른 작업의 주체가 작업하는 동안 기다리지 않아도 됨.

  • 대규모 사용자에게 푸시메세지 전송
  • 다양한 api를 한번에 호출할 때

2개의 댓글

comment-user-thumbnail
2022년 1월 1일

좀 더 자세히 부탁드려요.

1개의 답글