Blocking/Non-blocking & Synchronous/Asynchronous
글을 시작하기전
function A(){
B();
C();
}
이처럼 A가 호출하는 함수 , 나머지가 호출된 함수라고 가정하자.
Blocking/Non-blocking
제어권
개념
간단히 말하자면, A가 B에게제어권
을 주냐(Non-Blocking) 안주냐(Blocking) 차이이다.
Blocking
B가 자신의 일을 다 할때까지 제어권
을 가진다. A는 기다려야함. 그동안 C로 넘어갈 수 없다.
Non-Blokcing
-
B가 A에게 제어권을 바로 넘겨줘서 A가 자신의 일을 할 수 있다. C로 넘어갈 수 있다.
-
A는 B를 기다리면서 다른일을 한다
- B의 결과는 어디로???
- 제어권을 넘겨주면서 콜백함수도 넘겨주는데, 일단 완료되지 않았다는 결과를 넘겨준다고 생각하면 된다
Synchronous/Asynchronous
시간, 동시성
개념
간단히 말하면, B의 종료를 A가 처리하느냐(Sync) 마느냐(Async) 차이
Sync
-
A는 B가 동작 하는 중에, 결과를 기다리면서 상태체크한다. 그리고 B끝나면, 전달받은 값으로 가지고 처리한다.
-
여기서 Blocking과 다른점이 , Blokcing은 그냥 기다리기만 하는데, Sync는 확인한다는 것이다.
-
Java에서 synchronized 키워드를 통해 쓰레드간 동기화를 할 수 있다 -> data의 thread-safe
- thread는 공유 메모리 영역을 가지기 때문에 data의 thread-safe이 중요하다. 잘못하면 데이터가 의도치 않은 값으로 변경될 수 있음.
Async
- A가 B에게 작업을 요구하면 callback을 전달하고 B가 함수결과를 직접처리한다.
- A가 sync처럼 전달받은 값을 바로 처리하지 않는다.
Blocking/Non-Blocking, Sync/Async의 조합
Java는 block/sync , JS는 non-block/async 인것을 떠올리면 두개는 어느정도 이해가 될 것
Blocking & Synchronous
이런 JAVA에서의 입출력 상황을 생각
Blocking & Asynchronous
- 상사에게 서류를 전달했다.(A)
- 상사가 서류보는동안(B 시작)기다리란다
- 저거 바로 처리할 필요없는 서륜데..하면서 기다린다 (Block)
- 상사가 서류를 다보고(B 종료) 바로처리하고 하지만, 바로 할 필요없으니 나중에 처리한다(Async)
이런 경우는 보통 개발자의 실수로 발생한다고 한다.
Non-blocking & Synchronous
while문을 보면 while문으로 자기할일을 계속(Non-Block)하면서
ready를 확인 한다(Sync)
그리고 그결과를 바로처리한다.
예시를 들면,
치킨 시키고 다른일 하면서 치킨언제오는지 계속 확인하는것이다. 오면 바로 먹고
Non-blocking & Asynchronous
B가 진행되는 동안 A는 자기일을 계속한다. (Non-Block)
그리고 A는 B의 결과를 바로 처리하지 않아도 된다(신경x) (Async)
완전 따로따로 논다고 생각하면된다.
보통 JS에서 API 요청을 하고, 다른 작업을 하다가 콜백을 통해 추가적인 작업을 처리할 때 이렇게 한다.
4가지 중 가장 자원을 효율적으로 사용하는 케이스이다
Author And Source
이 문제에 관하여(Blocking/Non-blocking & Synchronous/Asynchronous), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gothae/네트워크-BlockingNon-blocking-SynchronousAsynchronous저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)