# 자바스크립트 - 싱글 스레드

* 자바스크립트가 싱글 스레드이기 때문에 동시성 문제가 발생합니다.
* 그 이유는 자바스크립트가 원래는 현재 쓰이고 있는 용도를 염두에 두고 만들어진 언어가 아니기 떄문입니다. 자바스크립트의 원래 목표는 더 빠르게 사용자 피드백을 제공하고 인터넷 트래픽을 줄이는 것이었습니다. 왜냐하면 만들어질 당시 인터넷은 아주 느렸기 때문입니다. 자바스크립트의 등장으로 사용자 피드백을 브라우저 상에서 처리할 수 있었습니다. 예를 들어 입력 필드의 유효성검사를 서버가 아닌 웹 브라우저 상에서 가능하도록 했습니다.
* 자바스크립트는 사용자 이벤트에 응답하는 짧은 프로그램을 실행하기 위해 만들어졌고, **이벤트 루프(Event Loop)** 사용하여 구현되었습니다.

  ```
  * 실행할 작업을 이벤트 큐에 추가하고 자바스크립트는 작업을 큐에서 한번에 하나씩 꺼내서 실행합니다. 
  * 자바스크립트는 싱글 스레드라서 이런 작업은 인터럽트 할 수 없고 이벤트 큐에 추가되는 순서를 제어할 수 없습니다.
  ```

  * 자바스크립트 초기에는 비동기 통신을 언어 설계에 포함하지 않았습니다.
    * 브라우저는 폼을 제출하고 서버는 웹 페이지를 반환하는 방식이었고 DOM의 등장으로 기존 웹 페이지 전체를 서버에서 새로운 HTML 페이지를 받아서 바꾸는 대신 일부만 변경할 수 있도록 됐습니다. XHR의 등장으로 기존의 페이지 로드 모델에서 벗어나 백그라운드에서 브라우저와 서버가 통신할 수 있게 됐습니다.
    * 이런 변화로 웹 페이지 복잡도가 극적으로 증가하고 자바스크립트 코드가 더 많이 작성되었습니다. 웹 페이지는 서버와의 비동기 통신에 극도로 의존하게 되었습니다. - 단일 스레드 모델과 비동기 통신을 잘 맞지 않았습니다.

## ※ Reference

[Why JavaScript is a single-thread language that can be non-blocking? | geeksforgeeks](https://www.geeksforgeeks.org/why-javascript-is-a-single-thread-language-that-can-be-non-blocking)

[<(한 권으로 읽는) 컴퓨터 구조와 프로그래밍 - 12. 병렬성과 비동기성>](http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR\&ejkGb=KOR\&barcode=9791189909284)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://yong2401.gitbook.io/til-by-ellie/javascript-11/javscript_single-threaded.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
