2013-03-21 2 views
0

나는 웹 근로자와 관련하여 문제를 겪고 있다는 일반적인 질문을 가지고 있습니다. 나는 그들이 다른 스레드에서 배경 계산에 관여하여 사용자가있는 창에서로드를 제거 할 수 있음을 이해합니다.스레딩은 웹 노동자를 사용하는 데 어떻게 도움이됩니까?

그러나 '다른 스레드'는 다른 프로그램 실행과 같은 의미인지 혼란스러워합니다. 컴퓨터에 별도의 브라우저가 열려 있거나 동일한 브라우저의 새 탭과 같은지 여부를 나타냅니다. 나는 이것이 후자의 경우보다 더 중요하다고 생각하지만 나는 그것에 대해 100 % 확실하지 않고 좋은 설명을 찾을 수 없다.

이것은 웹 근로자가 할 수있는 일의 한계에 어떤 영향을 미칩니 까?

미리 감사드립니다.

+0

또는 다른 탭이 Google 크롬에서 열리는 것과 비슷합니다. 각 탭이 다른 프로세스이기 때문에 본질적으로 새 브라우저와 동일합니다. – Markasoftware

+0

웹 작업자는 웹 서버의 프로세스입니다. 당신은 클라이언트 측 프로그램을 유추로 언급했지만 그렇지는 않습니다. 위키피디아 멀티 스레딩을 찾는다. 가치가 있는지/좋은지 알고 싶다면 ... 특별한 프로그래밍과 잡다한 일이 많이있는 쓰레기입니다. – chris

+1

@chris 웹 노동자는 클라이언트 측입니다. – bfavaretto

답변

3

웹 작업자는 독립적 인 실행 스레드처럼 작동합니다. 컴퓨터 프로세스에서 동시에 여러 스레드를 실행할 수 있습니다. 프로세서가 여러 개인 경우 이러한 여러 스레드가 실제로 동시에 실행될 수 있습니다. 프로세서가 하나만 있으면 컴퓨터의 OS가 각기 다른 스레드 사이의 시간 슬라이싱을 처리하여 잠시 동안 실행 한 다음 다음 실행하고 캐주얼 관찰자에게 실행중인 것처럼 보입니다. 같은 시간.

브라우저에서 웹 근로자는 실제로 브라우저 창 스레드와 독립적으로 실행되는 실행 스레드입니다 (브라우저에서 열려있는 각 브라우저 페이지마다 하나씩 있음). 브라우저 창 스레드에는 많은 제한 사항이 있습니다. 주요 제한 사항은 자바 스크립트 코드가 기본 브라우저 스레드에서도 실행되지 않는 경우에만 사용자 이벤트 (마우스 이동, 마우스 클릭, 키보드 이벤트 등)를 처리한다는 것입니다. 따라서 기본 브라우저 스레드에서 오랫동안 실행중인 자바 스크립트 코드를 실행하려는 경우 브라우저가 잠겨있는 것처럼 나타나고 자바 스크립트가 실행되는 동안 사용자 이벤트가 처리되지 않습니다. 이는 일반적으로 나쁜 사용자 환경으로 간주됩니다.

그러나 웹 작업자에서이 javascript를 실행하면 주 브라우저 창 스레드의 이벤트 처리를 차단하지 않고 장기 실행 가능합니다. 장기 실행 계산이 끝나면 주 브라우저 창 스레드에 메시지를 보내고 결과를 처리 할 수 ​​있습니다 (예 : 페이지에 표시되거나 특정 작업이 무엇이든간에).

작업을 작은 청크로 분해하고 반복 타이머에서 작은 청크를 실행하여 기본 브라우저 스레드의 한계를 해결할 수있는 방법이 있습니다. 그러나 웹 작업자 스레드를 사용하면 프로그래밍을 크게 단순화 할 수 있습니다.

웹 작업자는 어떤 식 으로든 브라우저 페이지에 액세스 할 수 없습니다. 그들은 값을 읽거나 수정할 수 없습니다 - 애니메이션 등을 실행할 수 없습니다 ... 이것은 페이지에서 더 독립적 인 작업에 대한 유용성을 제한합니다. 고전적인 사용법은 오랫동안 계산을하는 것입니다 (예 : 이미지의 데이터 분석, 아약스 호출 수행, 복잡한 계산 수행 등). 웹 작업자는 메시징 시스템을 통해 주 스레드와 통신 할 수 있습니다. 그것은 마치 음성 메일을 남기는 것과 같습니다. 웹 작업자는 주 스레드를 호출하고 메시지를 남깁니다. 다음 번 메인 스레드가 할 일이 없으면 웹 작업자가 보낸 메시지가 있는지 확인한 후 웹 작업자가 보낸 메시지를 처리합니다. 이런 방식으로, 메인 쓰레드와 웹 워커 쓰레드는 통신 할 수 있지만, 다른 일을하는 동안 다른 쓰레드를 인터럽트 할 수는 없습니다.

관련 문제