- event loop
- call stack
- web apis
- 동시성이 필요한 이유
- 병렬 계산
node.js 에서 자바스크립트는 싱글스레드의 논블로킹방식으로 동작한다. 논블로킹
은 엄밀히 말해서, 필요한 만큼의 블로킹을 하는 것 같다. 예를 들어, 네트워크 요청을 했을때, 응답이 올때까지 기다리는 시간이나, 디스크의 자료를 읽을때, 읽어오는 시간동안은 블로킹할 필요가 없다. 해당 시간동안 다른일을 하고 있다가 끝나면 다시 와서 남은 일을 하면 된다.
비동기는 위의 상황처럼 지금 실행할 코드와 나중에 실행할 코드가 분리된 상황을 말한다. 자바스크립트에서는 런타임 환경에 콜백을 등록하고, 때가되면 대기열에 추가하는 식(이벤트 루프)으로 비동기를 처리한다.
하지만, 하나의 작업이 매우 큰 상황에는 어떨까?
논블로킹은 불필요한 대기 시간을 없애는데에는 도움을 주지만, 작업 자체가 큰 경우에, 나머지 작업들은 순서가 올때까지 그대로 기다려야 한다. 이는 화면을 렌더링 해야하는 상황에서 매우 안좋을 수 있는데, 왜냐하면, 이전작업에 의해 오랜시간동안 렌더링을 수행하지 못할 수 있기 때문이다.
동시성 개념은 위와 같이 작업이 큰 상황에서 도움이 된다. 큰 작업이 있으면서도 여러가지 작업이 동시에 수행되는 것 처럼 보여야 할때가 있다. 이럴때는 작업을 잘게 쪼개서 동시에 조금씩 수행되도록하는 아이디어를 사용한다.
기록이 부실해지기 시작했다. 생각하는 양은 많아졌는데, 쓰는것이 줄어들었다는 것은 역시 습관이 약해지기 때문이라고 생각된다. 다시 한 번 시작해보자. 이번에는 부담스럽지 않게 조금씩 늘려나가자.
잘하든 못하든, 지금 잘하는가는 전혀 중요하지 않다. 지금 자라고 있는가? 에 자신있게 대답할 수 있도록 하자.