[Network] Blocking/Non-blocking & Synchronous/Asynchronous

foresec·2023년 7월 6일
0

Computer Science

목록 보기
15/28

Blocking/Non-blocking

호출된 함수가 호출된 함수에게 제어권을 건네주는 유무의 차이

함수 A, B가 있고, A(호출한 함수)안에서 B(호출된 함수)를 호출한 상황에서
B가 호출되며 B는 자신의 일을 진행히야함(제어권이 B에게)

  • Blocking : 함수 B는 할 일을 다 마칠 때까지 제어권을 가짐. A는 B가 마칠때까지 기다림
  • Non-blocking: 함수 B는 할 일을 마치지 않았어도 A에게 제어권을 바로 넘겨줌. 즉, A는 B를 기다리면서 다른 일 진행가능

Synchronous/Asynchronous

동기/비동기는 일을 수행 중인 동시성에 주목해야함

위와 같은 함수 A, B의 상황일 때, B의 수행 결과나 종료 상태를 A가 신경쓰고 있는 유무의 차이

  • Synchronous : 함수 A는 함수 B가 일하는중에 기다리면서, 현재 상태가 어떤지 체크
  • Asynchronous : 함수 B의 수행 상태를 B 혼자 직접 신경쓰면서 처리(Callback)

호출된 함수(B)를 호출한 함수(A)가 신경쓰는지, 호출된 함수(B) 스스로 신경쓰는지를 동기/비동기
비동기는 호출시 Callback을 전달하여 작업의 완료 여부를 호출한 함수에게 답하게 된다. (Callback이 오기 전까지 호출한 함수는 신경쓰지 않고 다른 일을 할 수 있음)

통합

Sync Blocking : JAVA 코드 실행 후 커맨드에서 입력을 받는 경우. 사용자로부터 입력을 받아야 입력값을 가지고 내부 처리하여 결과값을 콘솔에 출력하는 순차적인 작업

Async Blocking : 실무에서 마주칠 일 잘 없음. 안티패턴이라고 부르기도함
Node.js + MySQL의 조합에서 존재하긴함. Node.js가 비동기 방식으로 DB에 접근하기 때문에 Async, MySQL DB에 접근하기 위한 MySQL 드라이버가 Blocking 방식으로 작용하기 때문에

Sync Non-Blocking : Java에서 스레드 객체를 만들어 요청 작업을 백그라운드에 돌게 하고 메인 메서드에서 while문을 통해 스레드가 모두 처리되었는지 끊임없이 확인하고, 처리 완료되면 다음 메인자작업 수행.
혹은 게임에서 맵을 이동할 때, 맵 데이터를 다운받는 동안 로딩 스크린이 뜸. 제어권은 여전히 나한테 있어 화면에 로드율이 조회 및 표시됨

Async Non-Blocking : 웹 브라우저 파일 다운로드

+예시
JS의 setTimeout은 Asynchronous/Non-blocking 함수


참고
https://gyoogle.dev/blog/computer-science/network/Blocking,Non-blocking%20&%20Synchronous,Asynchronous.html

자세한 예시 다수
https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC

profile
왼쪽 태그보다 시리즈 위주로 구분

0개의 댓글