2012-03-15 2 views
4

자바 스크립트가 단일 스레드로 실행되고 있습니까? 전역 배열을 선언하고 AJAX 콜백에서 요소를 제거하기 시작하면서 동시에 다른 함수 (SetTimeOut으로 호출 됨)에서 매우 동일한 배열을 변경하기 시작하면 경쟁 조건이 발생할 위험이 있습니까?자바 스크립트는 단일 스레드입니까?

이 스레드를 발견 : javascript race condition, 그것은 항상 단일 스레드 및 단일 callstack에서 실행되기 때문에 경쟁 조건이 결코 자바 스크립트에서 발생합니다. 이것은 브라우저의 구현 방식에 달려 있습니까, 아니면 모든 브라우저에서 항상 단일 스레드가되도록 보장되어 있습니까?

+2

당신은 아약스와 함께 작업하는 경우가 하나이기 때문에하지만 때문에 자바 스크립트 자체의 인해 네트워크 대기 시간에 경쟁 조건이있을 수 있습니다 - 스레드. – pimvdb

+0

항상 그렇지 않습니다 : http://stackoverflow.com/questions/2734025/is-javascript-guaranteed-to-be-single-threaded – phazei

답변

4

모든 브라우저에서 항상 단일 스레드가 보장됩니까?

예.

물론 HTTP 요청과 같은 것들은 뒤에서 다른 스레드에서 작동하지만 자바 스크립트 코드가 실행될 때 한 번에 하나의 스레드에서만 발생할 수 있습니다.

+0

왜 단일 스레드의 보장이 필요합니까? – dldnh

+1

@dldnh http://en.wikipedia.org/wiki/Global_Interpreter_Lock –

2

JavaScript는 단일 스레드입니다. 참조 된 게시물 다른 컴퓨터에 setTimeout의 차이에 대해 설명

...


HTML5 여러 배경 스레드에서 자바 스크립트를 실행 WebWorkers의 개념을 소개합니다. 그것은 ... 모든 브라우저에서 지원되지 않지만

https://developer.mozilla.org/En/Using_web_workers

http://dev.w3.org/html5/workers/

+0

웹 작업자는 하나의 멀티 스레드 스크립트를 사용하는 것보다 두 개의 별도의 단일 스레드 스크립트를 실행하고 서로에게 메시지를 보내는 것과 같습니다. 변수는 두 스레드 모두에서 볼 수 없으며 작업자는 DOM을 조작 할 수 없습니다. –