자바 스크립트 멀티 스레딩


10

요즘 JavaScript는 모든 웹 개발 기술에서 클라이언트 측에서 클라이언트 인터페이스를 개선하고 일부 웹 서버에서 서버 측 논리로 사용하기 위해 모든 웹 개발 기술의 주요 플레이어입니다.

또한 사람들 (적어도 그들 중 일부)은 웹 게임 개발에서 플래시에서 자바 스크립트 및 HTML5로 이동하기 시작했습니다.

멀티 스레딩을 지원할 때가 아닌가! JavaScript를 멀티 스레딩 할 수있는 브라우저가 있습니까, 아니면 표준, HTML5 또는 이후 버전에 있습니까?


1
사람들은 필요하지 않은 일을하지 않습니다. Javascript 디자인에 기여한 사람들은 웹 서버 및 브라우저와 관련되어 있으며이를 알고있는 사람들입니다. 모든 것이 유틸리티에 관한 것입니다.
Dipan Mehta

답변:


9

멀티 스레딩은 EcmaScript에서 수행되지 않지만 호스트 환경에서는 노출 될 수 있습니다.

전형적인 예는 WebWorker<iframe> 로, 새로운 프로세스를 생성하는 방법으로 백그라운드 작업자를 가동하여 학대 를 할 수 있습니다.

JavaScript의 멀티 스레딩은 필요하지 않습니다 (예 : 그래픽 관련 프로그램은 예외). 다중 스레드가 필요하지 않으며 이미 GUI에 대한 이벤트 루프가 있으며 그래픽 렌더링 (캔버스)이 하드웨어 가속됩니다 (GPU가 그래픽을 병렬로 렌더링 함을 의미 함).

webcl 과 같은 프로젝트 는 매우 흥미 롭습니다.


2
"필요하지 않다"는 사실을 확장 할 수 있습니까? 최근 데스크톱 프로그래밍의 자연스러운 사례가 작업을 처리하기 위해 스레드를 생성하는 것이지만 쉬운 방법이나 표준 옵션이 아닌 인스턴스가 발생했습니다. 나는 그 사건을 해결했지만 스레드를 생성하는 것이 더 우아한 해결책 인 것처럼 보였다.
Rig

@rig 처리하려고 한 사건은 무엇입니까?
Zachary K

@Rig가 구체적인 예를 제공합니다. 클라이언트 측 JavaScript에서는 계산 비용이 많이 드는 처리가 드물다
Raynos

@Raynos는 그것이 필요하지 않은 방법에 대해 더 자세히 설명하십시오. 예를 들어 게임 개발에서 그래픽에 무거운 계산이 있고 물리 및 논리 프레임 속도에 멀티 스레딩이 없으면 쉽게 영향을받을 것이라고 확신하지 않습니다.
Ali

@Ali 나는 밖으로 나가 예외가 있다고 말했다. 그러나 대부분의 무거운 계산은 하드웨어 가속 그래픽 API를 통해 GPU에 제공되어야합니다.
Raynos

4

아니

멀티 스레딩은 소프트웨어에서 가장 어려운 것 중 하나입니다. 코드가 결정적이지 않을 때 실제로 해결하기 어려운 코너 케이스가 너무 많습니다. (잠금 장치가있는 멀티 스레딩에 대해 이야기하고 있습니다). 또한 다양한 JavaScript 라이브러리는 모두 다중 스레드가 아니라는 가정하에 구축되었습니다.

다중 처리 유형의 작업을 수행하기위한 액터 기반 프레임 워크를 제공하는 웹 워커가 있습니다. 이벤트를 통해 작업자를 생성하고 데이터를주고받을 수 있습니다.

편집 : 또 다른 이유는 JavaScript를 만들 때 작은 작업에 사용된다는 가정하에 동시성이 구현되지 않았다는 가정하에 수행 되었기 때문입니다. 이제 Retrofit을 위해서는 많은 코드가 손상 될 것입니다. 웹 워커를 추가함으로써 공유 메모리가없는 동시성이있는 시스템을 가질 수 있었지만 Erlang, Scala, Clojure와 같은 다른 많은 언어에서 매우 강력한 것으로 보이는 동시성 모델 인 액터를 사용함으로써 시스템을 가질 수있었습니다. 기타

(잠금 기반의 동시성을 싫어한다고 말할 수 없다면)


1
Multi threading is one of the hardest things in software to get right.-방금 이것에 놀랐습니다! 사용중인 브라우저, 데스크탑의 OS,이 페이지를 제공하는 웹 서버-일상적으로 사용하는 거의 모든 응용 프로그램은 멀티 스레드입니다. 당신은 그것을 의미합니까? 그러나 당신을 downvote,하지만 난 당신이 말한다면multithreading is not done because it is hard
Dipan 메타

3
@DipanMehta 멀티 스레딩 소프트웨어에서 가장 어려운 것들 중 하나입니다. 이러한 모든 응용 프로그램이 사용하는 이유는 실제로 재능있는 사람들
Raynos

@ Raynos-나의 선하심! 그래서 당신은 나를 재능이라고 부릅니다! 나는 매일 그것을 사용합니다 ... 나는 당신이 C 프로그래밍이나 대규모 응용 프로그램 일 때 매우 일반적이라고 생각합니다. 요점은 사용 및 요구 사항에 관계없이 W3C 컨소시엄 이 너무 어려워서 자바 스크립트를 대신하지는 않았다는 것입니다 !
Dipan Mehta

2
정확하고 효율적인 병렬 프로그램을 작성하는 것이 얼마나 어려운지 심각하게 과소 평가합니다. 그러나 멀티 스레딩은 불필요한 복잡성으로 인해 JavaScript에 없습니다 (3 주 만에 작성 됨)
Raynos

2
@DipanMehta는 잠금 기반 동시성을 올바르게 처리하고 모든 코너 케이스를 고정시키는 것은 어려운 문제입니다. 예를 들어, 모든 경우에 올바른 것으로 입증 될 수있는 잠금 장치가있는 대기열과 같은 단순한 구현은 몇 년 전까지 게시 가능한 결과였습니다. 그러나 더 중요하게는 그것을 가지고 있지 않은 언어로 개조하려고 노력하는 것은 문제를 요구합니다.
Zachary K

3

멀티 스레딩을 위해 자바 스크립트를 열면 해결하는 것보다 더 많은 문제가 발생합니다.

현재 아키텍처는 단일 스레드 이벤트 기반 (gui 스레드에서 더 자주 실행되지 않음) 즉, 모든 코드 블록을 사용하면 환경의 변경 사항을 제외하고 처음부터 끝까지 아무것도 변경되지 않습니다. 코드에서.

선점 또는 병렬 실행을 허용하자마자이 기능은 사라집니다. 즉, 변경하려는 데이터에 잠금을 적용하고 경쟁 조건을 디버그하기가 어려워 피해야합니다.

타임 아웃을 사용하여 의사 병렬 실행을 수행 할 수 있습니다. 즉, 크거나 오래 실행되는 함수를 원자 덩어리로 분할하고 setTimeout(function(){nextstep(args);},1);필요한 경우 다른 작업을 수행 할 수 있습니다


0

인텔은 얼마 전에 리버 트레일을 출시 하여 자바 스크립트에서 병렬 프로그래밍을 가능하게했다. 그러나 그것은 Firefox 전용 플러그인 이며이 기술을 W3C로 가져 오는 ECMA보다 훨씬 적은 로드맵에 대해서는 들어 보지 못했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.