공부기록
block vs nonblock, sync vs async 본문
block vs nonblock, sync vs async
사실 이들을 논하기 전에 우리는 블락과 논블락, 동기와 비동기가 다른 영역의 개념이라는 것을 깨달아야 한다.
시스템 콜의 측면에서 block은, 시스템 콜을 호출한 쓰레드가 대기 큐에 들어가게 되고, 시스템 콜이 끝나면 다시 실행대기 큐로 들어가게 되는 것을 말한다. 다시 실행을 재개하면, 그 쓰레드는 요청한 시스템 콜로부터의 결과값을 리턴받게 된다.
non-block은 반대로, block하지 않는다는 것이다. 쓰레드를 대기큐에 넣지 않으며, 시스템 콜은 호출되고서 바로 결과값을 리턴하게 된다.
synchronous 하다는 것은 시스템 콜을 호출했을 때, 호출 한 그 자리에서 호출한 쓰레드가 멈춰서 리턴 값을 기다린다는 것이다.
asynchronous 하다는 것은 시스템 콜이 호출되었을 때 시스템 콜의 리턴 값을 기다리지 않고 쓰레드가 계속해서 자신의 명령어들을 진행하는 것이다. 시스템 콜의 리턴 값은 추후에 인터럽트에 의해서 시스템콜을 호출한 쓰레드에 전달 될 수 있다.
말로 보면 유사한 block, nonblock, sync, async의 근본적인 차이는 무엇일까?
block, nonblock은 시스템 콜을 호출한 쓰레드가 결과값을 받기 위해 대기하는 지의 여부에 대한 이야기이다.
sync, async는 시스템 콜을 호출한 쓰레드가 시스템 콜의 리턴 값을 언제 받을 수 있느냐에 대한 이야기이다.
예를 들어, sync하면서 block한 메서드가 있을 수 있다. 파이썬으로 I/O 요청을 보내서 현재 쓰레드가 block 되는 상태를 예로 들어볼 수 있다.
sync하면서 unblock한 메서드도 있을 수 있다. 현재 I/O를 할 파일의 권한 플래그를 참조하는 것이 하나의 예가 될 수 있다.
async 하면서 nonblock 한 경우는 jQuery로 ajax를 통해 요청을 보내고, callback으로 요청에 대한 응답을 받아오는 경우를 예로 들 수 있다.
async하면서 block인 경우는 자바스크립트에서 readSync 같은, 응답을 기다리기 위해 블락을 하는 메서드를 사용하는 경우를 예로 들 수 있다.
블락과 논블락, 동기와 비동기는 서로 다른 개념임을 염두해두자.
출처
Operating System Concepts 10th
'Programming > etc' 카테고리의 다른 글
스프링 공부 1일차 (0) | 2021.09.29 |
---|