동기와 비동기

요청에 대한 결과를 돌려 주었을 때, 순서와 결과에 관심이 있는지 없는지로 판단한다.

동기(Sync) 란, 작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작함을 의미한다.

호출한 함수의 수행 결과 및 종료를 호출한 함수와 함께 신경쓰는 것을 말하고, 호출한 함수의 결과를 바로 처리하는 것을 의미한다.

비동기란(Async) 란, 시작/종료가 일치하지 않으며, 끝나는 동시에 시작을 하지 않음 을 의미한다.

하나의 요청에 대한 응답을 즉시 처리하지 않아도 되고, 그 시간 동안 다른 요청에 대한 처리가 가능한 방식을 의미한다.(자신의 일이 끝나면)

Untitled

Untitled

블로킹과 논블로킹

다른 주체가 작업을 할 때, 자신의 제어권이 있는지 없는지로 구분합니다.

블로킹은(Blocking) 이란, 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 수행하는 것을 의미한다.

즉, 자신의 제어권이 다른 주체에게 있는 것을 의미한다.

논블로킹(NonBlocking) 이란, 다른 주체의 작업에 관련없이 자신의 작업을 수행하는 것을 의미한다.

즉 , 자신의 제어권이 자신에게 있는것을 의미한다.

블로킹 예시

블로킹 예시

넌블로킹 예시

넌블로킹 예시

4가지 조합

블로킹 + 동기

다른 주체(호출한 함수)가 작업을 하는 동안 작업을 진행하지 않고, 호출한 함수가 결과를 반환하면 바로 처리하는 것을 의미한다.

Untitled

예) 자바에서 입력 요청(Scanner)에서 사용 제어권이 다른 주체에 넘어갔기 때문에, 입력이 주어질 때까지 기다리게 되고, 입력을 하게 되면 결과와 제어권을 받아서 바로 처리하게 된다.