Block/Non-Block, 동기/비동기

CinnamonTree·2022년 1월 17일
0

운영체제

목록 보기
4/4

Blocking vs Non-Blocking (제어권의 개념)

Q. 제어권을 어떻게 누가 가지고 언제 반환하였나?

Blocking: 자신의 작업을 진행하다가, 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것.
Non-Blocking: 다른 주체의 작업에 관련없이 자신의 작업을 하는 것.


Synchronous vs Asynchronous (반환 시점의 개념)

Q. 결과값/제어권을 반환하는 시간, 어떤함수가 끝나고 다음함수가 시작하는 시간이 일치되었는가?

Synchronous: 제어권의 반환과 결과값의 전달의 시작을 맞추거나, 함수A의 끝과 함수 B의 시작을 맞춘다면 동기라고 한다.

서버에서 데이터를 받아오는 작업을 할 때, 만약 동기식으로 작업을 실행한다면 데이터를 받아오는 작업을 기다리고 완료된 후에야 다음 작업이 실행될 것이다. 따라서 전체적인 실행 속도가 느려지게 되는데, 서버에서 가져오는 데이터의 양이 많을수록 느려지게 된다.

Asynchronous: 특정 코드의 연산이 끝나기를 기다리지 않고 그동안 다른 코드를 실행하는 것이다.

장단점
동기 방식은 결과가 나올 때까지 아무것도 못하지만 설계가 간단하고 직관적이라는 장점이 있고,
비동기 방식은 동기 방식보다 복잡하지만 데이터를 받는 시간동안 다른 작업을 할 수 있어 자원을 효율적으로 사용할 수 있다는 장점이 있다. 비동기 방식을 사용할 때 페이지 리로드 시 전체 리소스를 다시 불러오지 않고 필요한 부분만을 불러화 사용할 수 있는 장점이 있다.

  • cf) 자바스크립트의 비동기 코드 동작 방식은?

    비동기식 처리방식은 다중 스레드가 동작하는 멀티태스킹 작업일 수 밖에 없다. 하지만 자바스크립트는 싱글스레드로 프로그램이 동작하는데 비동기 처리 방식을 사용할 수 있다. 자바스크립트는 웹브라우저나 Node.js의 엔진 상에 존재하는 자바스크립트를 돌리는 쓰레드에서 실행되는데, 비동기식 처리 모델인 Web API라는것이 함께 동작한다. Web API는 자바스크립트 엔진 스레드와는 별개로 setTimeout이나 AJAX로 http데이터를 가져오는 시간이 소요되는 일들을 처리한다.

Async & Non-Block?
A 함수를 호출한 뒤 제어권을 반환받음과 동시에 '끝나지 않음'이라는 결과값을 전달받는다. 아직 안끝났는데(Non-Block) 반환하였다(동기).
결과가 완료되지 않았으니 계속 다시 물어보게 된다 =>

0개의 댓글