본문 바로가기

과거공부모음

나의 개발일지 TIL(Today I learned) - 동기와 비동기, 블로킹과 논블로킹, event loop

Today I learned

  • 동기와 비동기
  • 블로킹과 논블로킹
  • event loop

 

node.js는 싱글스레드 논블로킹 모델 그리고 이벤트 루프 특성을 가지고 있다

 

동기와 비동기

동기로 실행된다 라고 하면 먼저 실행된 코드의 결과가 나올때까지 대기하는 것이다

놀이기구에서 줄을 기다리고 사람을 태우고 놀이기구가 5분 작동을하면 대가자는 5분동안 기다리고
놀이기구가 멈추고 탑승자가 다 나가면 놀이기구를 탈 수 있다 이런 식으로 어떤 작동이 끝나고 자리가 생기는 걸 기다리는게 동기라고 생각하자

 

비동기로 실행된다는 실행 순서와 관계 없이 결과가 나오는 것을 말한다

음식점에서 입장은 선서대로 지만 다 먹은 사람은 바로 나올 수 있다 다 먹은 사람이 나오면 자리가 생기니 기대리던 사람은 나온 사람만큼 입장할 수 있다 이런 방식을 비동기라고 생각하자

 

블로킹 모델과 논 블로킹 모델

블로킹 모델은 코드의 실행이 끝나기 전까지 실행 제어권을 다른 곳에 넘기지 않아 다른 작을 하지 못하고 대기하는 것이다

논 블로킹은 코드의 실행이 끝나지 않아도 실행 제어권을 다른곳에 넘겨 다음 코드가 샐행될 수 있는 것이다

node.js는 논 블로킹 모델을 채용해서 현재 실행중인 코드의 실행이 끝나지 않아도 다음 코드를 호출한다

 

이벤트 루프

node.js는 싱글스레드이다 그래서 하나의 스택을 가지고있고 이 스택은 하나의 일만 할 수 있다

이런 경우 setTime처럼 딜레이를 주는 함수를 이용해 출력을 10초 뒤에 한다고 생각해보면

그냥 출력할 수 있는 console.log는 10초를 기다리고 출력해야한다 그러면 node.js가 비동기 실행을 못한다
node.js는 싱글스레드 논블로킹 모델로 비동기 실행을 하는 언어이다 그래서 이벤트 루프를 지원한다

이벤트 루프는 오래걸리는 녀석을 web API 또는 백그라운드라고 하는 공간에다가 보내버려서 작동하게 하고
다음 녀석을 스택에 올려 실행하고 백그라운드에서 동작을하고 실행 준비가 된 녀석은 큐에서 대기를 하고 있다가

스택에 모든 녀석들이 실행되고 비어있다면 그 때 큐에서 스택으로 보낸 후 실행한다

 

 

1

2

3

4

5

6

7