JavaScript는 단일 스레드입니다. JavaScript에 여러 코어가 있더라도 브라우저 스크립팅 언어로 메인 스레드라는 단일 스레드에서만 작업을 실행할 수 있습니다. JavaScript의 주요 목적은 사용자와 상호 작용하고 단일 스레드가 아닌 경우 DOM을 작동하는 것입니다. 복잡한 동기화 문제가 발생합니다.
이 튜토리얼의 운영 환경: Windows 10 시스템, JavaScript 버전 1.8.5, Dell G3 컴퓨터.
브라우저 스크립팅 언어로서 JavaScript의 주요 목적은 사용자와 상호 작용하고 DOM을 조작하는 것입니다. 이는 단일 스레드만 가능하다는 것을 결정합니다. 그렇지 않으면 매우 복잡한 동기화 문제가 발생합니다.
스레드는 기본적으로 프로그램이 작업을 완료하는 데 사용할 수 있는 단일 프로세스입니다. 각 스레드는 한 번에 하나의 작업만 실행할 수 있습니다.
Task A --> Task B --> Task C
각 작업은 순차적으로 실행되며 다음 작업이 시작되기 전에 하나의 작업이 완료되어야 합니다.
앞서 언급했듯이 이제 많은 컴퓨터에는 다중 코어가 있으므로 한 번에 여러 작업을 수행할 수 있습니다. 다중 스레드를 지원할 수 있는 프로그래밍 언어는 다중 코어를 사용하여 여러 작업을 동시에 완료할 수 있습니다.
Thread 1: Task A --> Task B Thread 2: Task C --> Task D
전통적으로 JavaScript는 단일 스레드입니다. 코어가 여러 개인 경우에도 메인 스레드라는 단일 스레드에서만 작업을 실행하도록 할 수 있습니다. 위의 예는 다음과 같이 실행됩니다:
Main thread: Render circles to canvas --> Display alert()
시간이 지남에 따라 JavaScript는 이러한 문제를 해결하기 위한 몇 가지 도구를 얻었습니다. 웹 작업자를 사용하면 일부 JavaScript 처리를 별도의 스레드(작업자라고 함)로 보내 여러 JavaScript 블록을 동시에 실행할 수 있습니다. 일반적으로 사용자 상호 작용을 차단하지 않도록 작업자를 사용하여 메인 스레드에서 비용이 많이 드는 프로세스를 실행합니다.
Main thread: Task A --> Task C Worker thread: Expensive task B
이 점을 염두에 두고 브라우저의 JavaScript 콘솔을 다시 열고 simple-sync-worker.html을 살펴보세요(실시간으로 실행되는 모습 확인). 이는 별도의 작업자 스레드에서 천만 날짜를 계산한 이전 예제를 다시 작성한 것입니다. 이제 버튼을 클릭하면 날짜 계산이 완료되기 전에 브라우저가 단락을 표시할 수 있습니다. 첫 번째 작업이 더 이상 두 번째 작업을 차단하지 않습니다.
JavaScript 언어의 주요 특징은 단일 스레드라는 것입니다. 즉, 한 번에 한 가지 작업만 수행할 수 있다는 의미입니다. 그렇다면 JavaScript는 왜 다중 스레드를 가질 수 없습니까? 이렇게 하면 효율성이 향상될 수 있습니다.
JavaScript는 목적에 따라 단일 스레드입니다. 브라우저 스크립팅 언어인 JavaScript의 주요 목적은 사용자와 상호 작용하고 DOM을 조작하는 것입니다. 이는 단일 스레드만 가능하다는 것을 결정합니다. 그렇지 않으면 매우 복잡한 동기화 문제가 발생합니다. 예를 들어 JavaScript에 두 개의 스레드가 동시에 있다고 가정해 보겠습니다. 한 스레드는 특정 DOM 노드에 콘텐츠를 추가하고 다른 스레드는 해당 노드를 삭제합니다. 이 경우 브라우저는 어떤 스레드를 사용해야 합니까?
그래서, JavaScript는 복잡성을 피하기 위해 탄생부터 단일 스레드를 사용했으며 이는 이 언어의 핵심 기능이 되었으며 앞으로도 변하지 않을 것입니다.
멀티 코어 CPU의 컴퓨팅 성능을 활용하기 위해 HTML5는 JavaScript 스크립트가 여러 스레드를 생성할 수 있도록 허용하지만 하위 스레드는 기본 스레드에 의해 완전히 제어되며 DOM을 작동해서는 안 되는 Web Worker 표준을 제안합니다. . 따라서 이 새로운 표준은 JavaScript의 단일 스레드 특성을 변경하지 않습니다.
관련 권장 사항: javascript 학습 튜토리얼
위 내용은 자바스크립트는 싱글스레드인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!