동작원리 7 - 비동기 프로그래밍(동기,비동기,블로킹,논블로킹)

김영현·2023년 9월 23일
0

동작원리

목록 보기
7/7

서론

동기(synchronous) - 비동기(asynchronous)
블로킹(blocking) - 논 블로킹(non-blocking)

헷갈리는 단골 주제다. 블로그에 쓰여있는 글들을 볼때 혼용하기도 하고
특히 JS는 동기 작업을 비동기로 처리해야해서 용어 사용이 잦다.

그래서, 뭔데?

  • 동기 : 동기작업은 순차적으로 실행된다.
    따라서 현재 실행중인 작업이 끝나기 전까지 다음 작업은 기다려야한다.
    작업1이 끝나야 작업2가 실행되는 형식
  • 비동기 : 작업1이 실행되는 동안 작업2가 실행되는 형식.
    작업1이 끝나면 결과를 받아올 수 있다.
  • 블로킹 : 작업이 끝나기 전까지 다른 작업을 수행할 수 없게 만듬.
    주로 I/O 작업에서 발생.(인터럽트) => 동기의 한 형태.
  • 논 블로킹 : 한 작업이 완료되지 않더라도, 다른 작업을 수행할 수 있는 상태.

여기까지는 정리했는데, 동기-블로킹간의 차이를 잘 모르겠다.
9월26일 화요일에 멘토님이 알려주시고나서 수정하겠음!


멘토님이 답변을 해주셨다. 그대로 첨부할 수 없지만, 이해를 바탕으로 작성

  • 동기 : 동기는 여러 작업이 주어졌을때 완료에 집중한 개념
  • 블로킹 : 다른 요청을 하기위해 현재 작업을 중단. 즉, 제어권의 개념.
    => suspend에 집중한 개념같다.
    동기가 조금은 더 큰 개념같다!

비동기 프로그래밍

우리의 언어(JS)는 동기적으로 작동한다. 비동기적으로 작동하는 프로그래밍언어가 얼마냐 있느냐마는...
간단한 예시로 보자

const name = "kim"
const greeting = `Hello, my name is ${name}!`;
console.log(greeting); // Hello, my name is kim
  1. name이라는 문자열 선언
  2. greeting에 문자열과 name조합해서 할당...d
  3. 콘솔로그!

이렇게 순서대로 작동한다.
각 라인은 이전 라인에 의존하니, 당연한 결과다. 선언하지 않은 변수를 사용할 수 없고, 기타 등등.
동기적 프로그래밍은 지켜져야만 한다.
어떠한 예외상황을 제외하고 말이다

예외

10초가 소요되는 함수가 있다고 가정해보자. stupidFunc().
stupidFunc()이 실행되는동안, 유저는 아무것도 할 수 없다.
흔히 쓰는 말로 프리징이 걸린다.

profile
모르는 것을 모른다고 하기

0개의 댓글