iterable 객체 연습 - 동기, 비동기, 블록, 논블록
이제까지는 iterable 객체 안에 정적의 Array가 있는 상태였다.
이제는 그것이 아닌 가상의 Array를 다루는 알고리즘을 만들어 보자.
클래스 구문을 만들 땐 생성자를 constructor
라는 특별한 키로 선언하게 되어있다.
이 키는 예약어이다.
const N2 = class {
constructor (max) {
// max 설정 이유 : 이 배열이 무한배열이 되는 걸 막아주기 위해 만든 것
this.max = max;
}
}
프로그램은 노이만 머신 모델에 의하면 메모리에 적재되면 쉴틈없이 실행되고 그 사이에 우리는 간섭하지 못한다는 것을 알고 있다.
쉴틈없이 일하는 동안 우리가 아무 간섭도 하지 못하는 이 상태를 동기 명령이라고 부른다.
동기 명령이란 한번에 적재된 명령이 한번에 쭉- 실행되는 것을 말한다.
이런 동기 명령이 실행되는 걸 관찰하는 것이 Flow이다.
동기 명령이 실행되는 동안엔 우리가 간섭할 수 없다.
CPU를 건들 수 없다는 뜻이다.
그래서 우리가 이 CPU를 못 건드리는 이 현상을 블로킹이라고 부른다.
블록, 논블록은 바로 여기서 오는 말이다.
동기적인 명령어가 실행되는 동안에 우리가 꼼짝도 못하는 걸 블로킹당했다라고 말한다.
그러면 블로킹을 당한 동안엔 해당 적재된 프로그램들이 CPU를 독점적으로 사용하고 있는 상황이다.
그럼 그 동안 그래픽처리, 네트워크 처리 등등 아무것도 못한다는 소리다.
그럼 브라우저는 몇초동안 동기적인 명령 처리를 허용해줄까?