동기와 비동기
- 작업을 수행하는 주체가 2개 이상일 때
- 작업 시간(시작, 종료 등)을 서로 맞춘다면 동기,
- 서로의 작업 시간이 관계 없다면 비동기라고 부른다.
블로킹 논블로킹?
- 블로킹/논블로킹 은 작업의 대상이 2개 이상일 때
동기
작업을 수행하는 두개 이상의 주체가 서로 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작할 때를 의미
비동기
두 주체가 서로의 시작, 종료시간과는 관계 없이 별도의 수행 시작/종료시간을 가지고 있을 때를 뜻함.
블로킹
자신의 작업을 하다가 다른 작업 주체가 하는 작업의 시작부터 끝까지 기다렸다가 다시 자신의 작업을 시작
논블로킹
다른주체의 작업과 관계없이 자신의 작업을 계속한다면 논블로킹
동기와비동기/블로킹과 논블로킹의 조합
동기 + 블로킹
- 동기의 조건: 두개 이상의 작업의 시작시간, 종료시간이 같거나 시작과 동시에 종료할 것
- 블로킹의 조건: 다른 작업을 하는 동안 자신의 작업을 일시정지할 것
- ex) DB에 쿼리를 날린다. 매소드에서 다른 매소드를 호출하여 결과값을 즉시 받아온다
비동기 + 블로킹
- 비동기의 조건: 다른 작업과 시작, 종료 시간이 다를 경우
- 블로킹의 조건: 다른 작업을 하는 동안 자신의 작업을 일시정지할 것
이 경우 결국 다른 작업이 끝날 때까지 기다려야 하기 때문에 동기+블로킹과 비슷한 작업 효율.
- ex) 비동기, 논블로킹 작업을 호출하고 자신의 작업을 하던 도중 호출한 작업의 결과 값을 조회하려고 했을 때(블로킹 메서드 실행)
동기 + 논블로킹
- 동기의 조건 : 두개 이상의 작업의 시작시간, 종료시간이 같거나 시작과 동시에 종료할 것
- 논블로킹의 조건: 다른 작업의 주체가 작업하는 동안 기다리지 않아도 됨.
이 경우에 다른 작업과의 동기를 위해 계속해서 작업이 끝났는지 조회하는 polling을 구현해야함
비동기 + 논블로킹
- 비동기의 조건: 다른 작업과 시작, 종료 시간이 다를 경우
- 논블로킹의 조건: 다른 작업의 주체가 작업하는 동안 기다리지 않아도 됨.
- 대규모 사용자에게 푸시메세지 전송
- 다양한 api를 한번에 호출할 때
좀 더 자세히 부탁드려요.