LHJ

I'm a FE developer.

14. iterable 객체 연습 - 동기, 비동기, 블록, 논블록

10 Aug 2020 » codespitz_re

iterable 객체 연습 - 동기, 비동기, 블록, 논블록

이제까지는 iterable 객체 안에 정적의 Array가 있는 상태였다.
이제는 그것이 아닌 가상의 Array를 다루는 알고리즘을 만들어 보자.

클래스 구문을 만들 땐 생성자를 constructor라는 특별한 키로 선언하게 되어있다.
이 키는 예약어이다.

const N2 = class {
    constructor (max) {
        // max 설정 이유 : 이 배열이 무한배열이 되는 걸 막아주기 위해 만든 것
        this.max = max;
    }
}

프로그램은 노이만 머신 모델에 의하면 메모리에 적재되면 쉴틈없이 실행되고 그 사이에 우리는 간섭하지 못한다는 것을 알고 있다.
쉴틈없이 일하는 동안 우리가 아무 간섭도 하지 못하는 이 상태를 동기 명령이라고 부른다.
동기 명령이란 한번에 적재된 명령이 한번에 쭉- 실행되는 것을 말한다.
이런 동기 명령이 실행되는 걸 관찰하는 것이 Flow이다.

동기 명령이 실행되는 동안엔 우리가 간섭할 수 없다.
CPU를 건들 수 없다는 뜻이다.
그래서 우리가 이 CPU를 못 건드리는 이 현상을 블로킹이라고 부른다.

블록, 논블록은 바로 여기서 오는 말이다.

동기적인 명령어가 실행되는 동안에 우리가 꼼짝도 못하는 걸 블로킹당했다라고 말한다.

그러면 블로킹을 당한 동안엔 해당 적재된 프로그램들이 CPU를 독점적으로 사용하고 있는 상황이다.
그럼 그 동안 그래픽처리, 네트워크 처리 등등 아무것도 못한다는 소리다.
그럼 브라우저는 몇초동안 동기적인 명령 처리를 허용해줄까?