Blocking vs Non-Blocking, Sync vs Async

깡깡·2021년 9월 13일
0

이 글은 테코톡 멍토 님의 Blocking vs Non-Blocking, Sync vs Async 영상을 보고 작성하였습니다.

Blocking vs Non-Blocking

Blocking: 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것

Non-Blocking : 다른 주체의 작업에 관련없이 자신의 작업을 하는 것

Blocking과 Non-Blocking은 다른 주체가 작업할 때 자신에게 제어권이 있는지 없는지로 볼 수있다.

Synchronous vs Asynchronous

Synchronous: 작업을 동시에 수행하거나,동시에 끝나거나, 끝나는 동시에 시작함을 의미

Asynchronous: 시작,종료가 일치하지 않으며, 끝나는 동시에 시작을 하지 않음을 의미

Sync & Blocking

프로그램이 데이터를 요청하고 데이터를 조회하여 가져와서 다시 줄 때까지 프로그램은 기다리게되고 응답이 될때까지 커널에서는 다음 작업을 못한다.

Sync & Non-Blocking

프로그램이 데이터를 요청하고 커널에서는 데이터를 조회하면서 바로 제어권을 넘긴다. 그리고 프로그램에서 동기상태여서 데이터가 다되었냐고 계속 물어본다.
그리고 커널에서 데이터 조회가 되어 응답해주면 그때 프로그램측에서 받아서 처리후 다음 작업을 한다. 커널측에서 다른 작업도 데이터 조회때부터 가능해진다. 다른 작업중에 데이터가 회신되어서 넘겨줄때 그때 다시 작업을 하게 된다.

Async & Blocking

대표적인 케이스가 Node.js와 오라클, MySQL같은 조합이다.
커널측에서 제어권을 넘겨주지 않아서 결구 비동기로 실행하여도 묶여있는 상태가 되어버린다.

Async & Non-Blocking

프로그램에서 데이터를 요청하고 커널에서 바로 제어권을 반환하여
프로그램에서 다른일을 하게된다. 그리고 데이터가 반환되면
바로 프로그램에서 그 데이터를 받아서 이전에 수행하던 행위를 완료하게 된다.

profile
개발세발자

0개의 댓글