Thread의 이해하기, 스레드란 무엇인가?


# 스레드(Thread)란?


스레드는 프로그래밍이 실행될때 동작의 구분이 되는 흐름을 말합니다. 스레드는 그 수에 따라 싱글스레드와 멀티스레드로 구분됩니다. 자바스크립트의 경우 싱글스레드 방식이며 Web worker를 통하여 멀티스레드를 사용할 수 있습니다.


# 자바스크립트에서 스레드 이해하기


자바와 같은 언어는 멀티스레드를 선택하여 사용할 수 있으나 자바스크립트는 웹워커 이전까지 싱글스레드로만 구현되기 때문에 이를 이해하기 어렵습니다. 만약 수행해야할 기능이 여러개인 경우 각각 기능과 스레드를 멀티로 구분할 수 있습니다. 하지만 싱글스레드 방식에서는 여러개의 기능들을 시간순으로 배열하여 동시에 동작하는 것 처럼 보일 수 있게할 뿐 하나의 스레드로 동작하게됩니다.


! 싱글스레드의 문제점
자바스크립트가 동작하는 동안 인터페이스가 동작하지 않는 문제가 있습니다. 이런 이유로 하나의 스레드에서 계속되는 스크립팅이 발생하는 경우 사용자의 UI에 큰 불편이 생기게 됩니다.

function delay() {
for(i=0, l=100000; i < l; i++) {
var elem = document.createElement('span');
elem.innerText= 'Too slow';
document.body.append(elem);
};

console.log('end');
}

위 delay()하는 DOM 엘리먼트를 10만개 그린 후 body에 append하는 과정을 계속합니다. for 루프가 끝나 end를 출력하기 이전까지 화면의 다른 동작을 할 수 없게됩니다.

해결방법으로는 이벤트의 수를 작게 나누는 과정이 필요합니다. 예를들어 하나를 그 이상으로 나누어 실행하여 중간 중간의 큐 사이에 여유를 주는 것입니다.