스레드는 컴퓨터 프로그램이 실행될 때의 작업단위에요.
프로세스가 프로그램을 실행하는 단위라면,스레드는 그 프로세스 내에서 실행되는 작은 작업 단위라고 할 수 있습니다.
싱글 스레드는 한 번에 하나의 작업만 수행하는 방식이에요.
한 작업이 완료될 때까지 다른 작업을 수행하지않아요.
비동기란 한 작업이 끝나기를 기다리지 않고,다른 작업을 시작할 수 있어요.비동기 작업은 나중에 완료됩니다.
이벤트 루프는 콜 스택과 태스크 큐를 관리하며 콜 스택이 비어 있을 때 태스크 큐에서 작업을 가져와 실행합니다. 이 과정이 반복되면서 비동기 작업을 처리합니다.그렇다면 콜 스택과 태스크 큐는 무엇일까요?
콜 스택은 현재 실행 중인 함수들이 쌓이는 스택이고 태스크 큐는 비동기 작업이 완료된 후 실행될 콜백 함수들이 대기하는 큐에요.
setTimeout, setInterval, 이벤트 리스너).다음은 태스크 큐의 동작을 보여주는 간단한 예제입니다.
console.log('Start');
setTimeout(() => {
console.log('Timeout callback');
}, 0);
console.log('End');
// 출력: Start
// End
// Timeout callback
이 예제에서 프로미스의 콜백 함수는 마이크로태스크 큐에 추가되며, setTimeout의 콜백 함수는 태스크 큐에 추가돼요. 따라서 'Start'와 'End'가 먼저 출력되고, 그 다음에 'Promise callback'이 출력되며, 마지막으로 'Timeout callback'이 출력돼요.
프로미스는 비동기 작업을 처리할 때 사용되는 자바 스크립트 객체에요.

이제 위그림을 보면서 JavaScript의 싱글 스레드와 이벤트 루프를 설명해드릴게요.
위에 보시면 스레드가 싱글인 것을 확인할 수 있는데 일단 자바 스크립트는 자체적으로 멀티스레드를 지원하지 않습니다 따라서 하나의 스레드에서 모든 코드를 실행하며,비동기적 처리를 통해 블로킹을 촤소화합니다.
비동기적 처리를 통해 블로킹을 최소화한다는 말은, 한 작업이 완료될 때까지 기다리지 않고 다른 작업을 계속해서 수행할 수 있게 함으로써, 시스템 자원을 효율적으로 활용하고 사용자 경험을 개선한다는 의미에요. 여기서 "블로킹"은 프로그램이 어떤 작업을 완료할 때까지 멈춰 있는 상태를 말해요.이를 통해 응답성을 높이고 자원을 효율적으로 사용할 수 있어요.
이 그림을 통해 JavaScript가 싱글 스레드로 작동하면서도 비동기 처리를 통해 여러 작업을 효율적으로 관리하는 방법을 쉽게 이해할 수 있을 거예요. 이렇게 JavaScript는 복잡한 웹 애플리케이션을 안정적으로 동작하게 만듭니다.
서버 사이드 애플리케이션 개발을 위해 설계된 자바스크립트 런타임 런타임 환경이에요 크롬 V8 자바스크립트 엔진을 기반으로 하며,비동기 이벤트 기반 아키텍처를 사용하여 높은 성능과 확장성을 제공해요.간단하게 말하자면 노드 js는 서버를 도와주기 위해 개발된 도구이고 싱글스레드로 이루어져 있고 비동기 작업을 통해 높은 성능과 확장성을 가집니다
아키텍쳐란 시스템의 구성 요소와 이들 간의 관계,그리고 상호작용을 정의합니다.소프트웨어 아키텍처는 애플리케이션의 구조를 정의해요.
1.Node.js에서의 관점노드
js의 싱글 스레드 모델은 이벤트 기반 아키텍처와 비동기 I/O 처리 덕분에 높은 성능과 효율성을 제공해요. 코드의 단순성과 유지보수의 용이성, 그리고 클러스터링을 통한 확장성 덕분에, 노드.js는 고성능 서버 애플리케이션을 개발하는 데 적합한 환경을 제공해요.
2.언어적 관점
동시성:만약에 버튼이 하나가 있다고 가정을 해보아요.1명의 사람이 그 버튼을 10번 누르면 10번을 눌렀다고 뜰거에요.하지만 2명의 사람이 그 버튼을 동시에 누르게 된다면 몇번이나 눌렀는지 정확하게 나오지 않겠죠?
이렇게 자바 스크립트는 싱글 스레드를 통해 동시성을 관리할 수 있어요.