개발 끄적임 🖥
로그인
개발 끄적임 🖥
로그인
Blocking/Non-Blocking & Sync/Async
개발 끄적끄적 .. ✍️
·
2022년 1월 4일
팔로우
0
0
참고링크
https://velog.io/@nittre/블로킹-Vs.-논블로킹-동기-Vs.-비동기
https://nesoy.github.io/articles/2017-01/Synchronized
https://jh-7.tistory.com/25
blocking / non-blocking
A함수가 B함수를 호출 했을 때,
제어권
을 어떻게 처리하느냐에 따라 달라짐(혹은 프로그램이 바로 실행 할 수 있느냐)
제어권
함수의 코드를 실행할 권리 같은 것
제어권을 가진 함수는 자신의 코드를 끝까지 실행 후 자신을 호출한 함수에게 돌려줌
blocking
blocking은 A함수가 B함수를 호출하면 제어권을 A가 B로 넘김
직접 제어할 수 없는 대상의 작업이 끝날 때까지 기다려야 하는 경우
제어권을 B에게 넘겼기 때문에 함수 실행을 잠시 멈춤. system call이 끝날 떄 까지 프로그램은 대기
waitQueue에 들어감
B함수가 완료되면 다시 A에게 제어권을 넘김. system call이 완료되면 그 때야 return
non-blocking
A함수가 B함수를 호출해도 제어권은 그대로 자신이 가지고 있음
A함수가 B함수를 호출하면, B함수는 실행되지만 제어권은 A함수가 그대로 가지고 있음
A함수는 계속하여 제어권을 가지고 있기 때문에 B함수를 호출한 이후에도 자신의 코드를 계속 실행함
waitQueue에 들어가지 않음
sync / async
함수의
완료 여부
를 신경 쓰는가
가장 큰 차이점은 결과물을 가져오는 시점의 차이
synchronous & asynchronous는 결과물을 돌려 받는 시점에 초점을 두면 이해하기 쉬움
동기는 호출한 함수가 내가 원하는 값을 바로 반환, 비동기는 호출한 함수가 내가 원하는 값을 콜백으로 반환
sync
A와 B가 시작 시간 또는 종료 시간이 일치하면 동기
함수 A가 함수 B를 호출한 뒤, 함수 B의 리턴 값을 계속 확인하면서 신경 쓰는 것이 동기
system call이 끝날 때 까지 기다리고 결과물을 가져옴
동기는 함수를 호출할 때 결과를 얻을 때까지는 호출이 아무것도 반환되지 않음
async
호출하는 함수가 호출되는 함수에게 작업을 맡겨놓고 신경을 쓰지 않는 것
함수 A는 함수 B를 호출한 후로 함수 B의 작업 완료 여부는 신경 쓰지 않음
system call이 완료되지 않아도 나중에 완료가 되면 그 때 결과물을 가져옴
함수 A가 함수 B를 호출 할 때 콜백함수를 함께 전달해서, 함수 B의 작업이 완료되면 함께 보낸 콜백 함수를 실행
Blocking/Non-Blocking & Async/Sync
Blocking / Non-blocking 과 Sync / Async 는 '관점'을 어떻게 두느냐의 차이
Non-Blocking VS Asynchronous
system call이 즉시 return 될 때 데이터의 포함 유무
Asynchronous는 요청에 처리 완료와 관계없이 응답. 이후 운영체제에서 응답할 준비가 되면 응답
Non-Blocking은 요청에 처리할 수 있으면 바로 응답. 아니면 error를 반환
Blocking VS Synchronous
waitQueue의 유무
Blocking은 System Call의 return을 기다리는 동안 필수로 waitQueue에 머뭄
Synchronous는 system call의 return을 기다리는 동안 waitQueue에 머물 수도 있고 아닐 수도 있음
Sync-Blocking / Async-NonBloking
Sync-NonBlocking
B함수가 A함수에게 바로 제어권을 돌려주지만 언제 종료되는지 알 수 없는 B함수의 종료를 A함수가 처리되어야함
A함수가 직접 결과를 처리해야하는 상황이기에 B함수의 종료를 반복적으로 물어봐야함
Async-Blocking
굉장히 비효율적인 구조
개발 끄적끄적 .. ✍️
팔로우
이전 포스트
jwt
다음 포스트
카프카를 사용하는 이유 (링크드인이 카프카를 만든 이유)
0개의 댓글
댓글 작성