블로킹이라고 정확하게 명시되어 있는 것은 존재하지 않는다고 한다.
느리게 동작하는 코드를 우리는 블로킹이라고 부른다.
alert, console.log등 이 자체는 느리지 않는다.
하지만 while문의 루프 안에서 수십억번이 실행된다면
느릴것이다.
네트워크 요청이나 이미지 프로세싱은 느리다. (*이미지 스프라이트 기법이 사용되는 이유)
느린 동작이 스택에 남아있는 것을 보통 블로킹이라고 말한다.
자바스크립트는 싱글 스레드 프로그래밍 언어이다.
싱글 스레드는 네트워크 요청을 하고는 마냥 끝날때 까지 기다린다. 그것 말고는 방법이 없기 때문이다.
문제는 무엇이냐?
바로 웹 브라우저에서 코드가 실행되고 있기 때문이다.
동기적으로 실행되는 네트워크 요청이 콜 스택을 블로킹하여 브라우저는 다른 일들을 할 수가 없게 된다.
랜더링이나 다른 코드를 실행하지 못하고 멈춰있다.
이와 같은 이유로
우리가 사용하는 브라우저나 노드에서는 블로킹 함수가 거의 없다. 대부분 비동기로 만들어져있다.
'JS' 카테고리의 다른 글
ES6 - template literal (0) | 2020.07.21 |
---|---|
ES6 - Block scope (0) | 2020.06.21 |
호이스팅 (0) | 2020.06.14 |
클로저 (0) | 2020.06.08 |
스코프와 스코프체인 렉시컬스코프 (0) | 2020.06.08 |