면접 공부

동기와 비동기의 차이, 블락킹과 논블락킹의 차이, 비동기와 논블락킹에 차이에 대해 알아보자

rabbit97 2024. 11. 26. 23:32

블락과 논블락은 동기와 비동기에서 파생되었다는건 알겠는데

 

그럼 비동기와 논 블락킹의 차이점은??

 

 - 비동기와 논 블락킹을 조합하는 방법은 굉장히 많이 사용하는 방법인데 이 둘의 차이점이라 하면

 

[ 비동기  vs 논블로킹 ]

  • 비동기, 논블로킹: 네트워크 요청을 보내고 다른 작업하기
  • 비동기, 논블로킹: 네트워크 요청을 보내고 특정 주기(10초, 1분, 5분) 확인하면서 다른 작업하기
  • 논블로킹: 네트워크 요청을 보내고 다른 작업을 할 수 있는데 하지 않고 네트워크 응답이 왔는지만 확인하기

============================================================================

참고 블로그 : https://velog.io/@slobber/%EB%8F%99%EA%B8%B0%EC%99%80-%EB%B9%84%EB%8F%99%EA%B8%B0%EC%9D%98-%EC%B0%A8%EC%9D%B4

 

동기와 비동기의 차이

오늘은 개발을 하다보면 자주 등장하는 동기와 비동기 개념에 대해 알아보겠습니다.

velog.io

데이터 처리 모델

데이터 처리 모델을 쉽게 표현하자면 데이터를 받는 방식이라고 할수 있습니다.
이 방식에는 동기식 처리와 비동기식 처리 모델이 존재합니다.
이 둘의 개념에 대해 알아보고 둘의 차이점을 알아보겠습니다.


💡동기(synchronous)

  • 동기는 데이터의 요청과 결과가 한 자리에서 동시에 일어나는것을 말합니다.

요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어져야 합니다.

사용자가 데이터를 서버에게 요청한다면 그 서버가 데이터 요청에 따른 응답을 사용자에게 다시 리턴해주기 전까지 사용자는 다른 활동을 할 수 없으며 기다려야만합니다.

ex)
브라우저를 실행시키는 시간이 약 10분이 소모된다고 가정했을시, 브라우저가 실행되는10분이라는 시간 동안 사용자는 컴퓨터💻의 다른 프로그램들을동작시키지 못하며 브라우저가 켜지는 그 순간만을 계속 기다려야한다는 것입니다. 이 시간이 10분이든 100분이든 관계없이 한 개의 데이터 요청에 대한 서버의 응답이 이루어질 때까지 계속 대기해야만합니다.


🕯 비동기(Asynchronous)

  • 비동기는 동시에 일어나지 않는다는 의미입니다.
  • 요청한 결과는 동시에 일어나지 않을거라는 약속입니다.

서버에게 데이터를 요청한 후 요청에 따른 응답을 계속 기다리지 않아도되며 다른 외부 활동을 수행하여도되고 서버에게 다른 요청사항을 보내도 상관없습니다


동기와 비동기의 장단점

💡 동기

장점 : 설계가 매우 간단하고 직관적이다.

단점 : 결과가 주어질 때까지 아무것도 못하고 대기해야 합니다.


🕯 비동기

장점 : 요청에 따른 결과가 반환되는 시간 동안 다른 작업을 수행할 수 있습니다.

단점 : 동기식보다 설계가 복잡합니다.


📝 정리

  • 동기와 비동기는 어떤 작업 혹은 그와 연관된 작업을 처리하고자 하는 목적의 차이 입니다.
  • 동기는 추구하는 행위 와 목적이 동시에 이루어지고,
  • 비동기는 추구하는 행위 와 목적이 다를 수도 있고, 동시에 이루어지지도 않습니다.

👀 블록 과 논블럭의 차이

블록 과 논블럭은 동기, 비동기와 연결되는 개념입니다.

🧱 블록이란?

  • 블록이란 동기의 개념에서 만들어진 상태로

브라우저가(크롬) 실행되는 시간이 10분(요청)이라고 가정했을시에
브라우저가(크롬) 이 오픈(결과) 되기전까지 다른 브라우저(사파리 등등)은 계속 대기해야 하는 상태를 블록 상태라고 부릅니다.


⚙️ 논블록이란?

  • 논블록이란 비동기 개념에서 만들어진 상태로

브라우저가(크롬) 실행되는 시간이 10분(요청)이라고 가정했을시에
브라우저가(크롬) 이 오픈(결과) 되기전까지 다른 브라우저(사파리 등등)은 시간을 대기 하지 않고 제약없이 자유롭게 사용할수 있는 상황을 논블록 상태 라고 부릅니다.


📝 블럭과 논블럭 정리

  • 블록이란 동기의 개념에서 만들어진 상태
  • 논블록이란 비동기 개념에서 만들어진 상태

===================================================================================

참고 블로그 : https://jhbljs92.tistory.com/entry/13-%EB%8F%99%EA%B8%B0%EC%99%80-%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EA%B3%BC-%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9

 

13. 동기와 비동기, 블로킹과 논블로킹

블로킹 이라는 말을 처음 들었을때, 대충 추상적으로 아 다른 함수가 실행중일때 다른 함수를 실행못하게 막는건가...?? 라고 막연하게 생각했었는데 이번에 동기님들의 스터디 발표와 여러 참

jhbljs92.tistory.com

비동기 방식 + 논블로킹 방식

비동기 방식과 논블로킹 방식은 우리에게 엄청나게 익숙한 방식.

비동기 방식이기 때문에 상위 프로세스는 하위 프로세스의 작업 완료 여부를 신경쓰지않음.

하위 프로세스의 작업이 종료되면 스스로 상위 프로세스에게 보고를 하든 다른 프로세스에게 일을 맡기든 한다.

또한, 논블로킹 방식이므로 상위 프로세스는 하위 프로세스에게 일을 맡기고

자신의 작업을 계속 수행을 함.

비동기 방식 & 논블로킹 방식 코드

비동기 방식 & 논블로킹 방식 코드 결과

위의 예제를 보면, boss함수는 employee 함수에게 사탕 100개 포장을 지시하고,

자신은 바로 퇴근을 해버렸다.

상위 프로세스인 boss함수는 employee함수의 작업이 언제 끝나는지 관심없고,

작업의 완료 신호콜백으로 넘겨진 사탕포장 결과 보고 작업이 대신 받아서 처리

비동기 & 논블로킹 방식은 여러개의 작업을 동시에 처리할 수 있는 부분에서 효율적,

하지만 너무 복잡하게 얽힌 비동기 처리 때문에 흐름을 읽기 어려워지는 문제.

Promise 나 async/await 와 같은 문법을 사용하는 이유도

이러한 비동기 처리의 흐름을 좀더 명확하게 인지하고자 하는 노력이다.