Rev. 2.73

파이어폭스 3.5에 추가된 기능인 DOM Workers를 테스트 해 보았습니다. 자바스크립트로 멀티스레드(multi-thread)를 구현할 수 있다길레 솔깃해서 살펴보았습니다. 'Worker'로 새 인스턴스를 만들어서 'onmessage', 'onerror', 'postMessage' 메서드로 변수를 전달하고 결과물을 돌려받을 수 있는 실행구조를 가지고 있었습니다. 인스턴스를 생성할 때에는 자바스크립트 파일을 로드하여 이루어지며, 여기에 사용되는 자바스크립트는 DOM에 직접 액세스 할 수 없고 네임스페이스 역시 공유하지 않습니다. 즉, 연산만을 죽어라 수행하도록 디자인 된 것입니다.

function fibonacci(n) {
  return (n < 1) ? -1 : (n > 2) ? fibonacci(n - 1) + fibonacci(n - 2) : 1;
}

onmessage = function(event) {
  return postMessage(fibonacci(event.data));
}

위 코드는 테스트에 사용된 'fibonacci.js' 파일의 내용입니다. 한줄짜리 피보나치(fibonacci) 함수를 호출하고 그 결과를 반환합니다. 이 worker용 자바스크립트 파일은 아래와 같이 사용될 수 있습니다.

var worker = new Worker("/javascripts/workers/fibonacci.js");
worker.onmessage = function(event) {
  alert(event.data);
};
worker.postMessage(10);

실제로 작업 수행이 병렬로 이루어지는지 확인하기 위하여 동일한 피보나치 함수가 worker를 사용하여 실행되는 것과 순수 자바스크립트로 실행한 것을 복합적으로 테스트하고 수행 시간을 측정했습니다. worker가 결과를 응답하는 시간이 매우 불규칙적이고 브라우저가 무작위로 죽어싸서 신빙성 있는 테스트는 어려워 보이네요. 성능 모니터(perfmon.exe)를 토글해서 스레드를 직접 확인해 보세요. 스레드가 급증했다가 줄어들고 그럽디다. 속도도 구린것이 그닥 유용해 보이지는 않군요. 구글 크롬 v8 엔진처럼 자바스크립트 자체를 멀티스레드 처리하는 쪽이 훨씬 현실적이어 보입니다. 이걸 어디다 써먹어나요. 에이~ 완전 뻘짓했네요. DOM Workers는 파이어폭스 부가기능 제작 또는 굉장히 무거운 연산처리에 적합해 보입니다.

DOM workers Test

x

덧. 테스트가 공정하지 못했네요. worker 인스턴스를 지속해서 생성하지 않고 참조하게 했더니 속도가 크게 개선되긴 했습니다만, 순수 자바스크립트만 못한 것은 사실이네요. 백그라운드에서 도는 프로그램에 사용하면 좋겠다는 생각을 했습니다.

Comments

Got something to add? You can just leave a comment.

  • 클라이언트 로컬저장도 그렇고, 이것도 그렇고 구글 기어스가 떠오릅니다.

    reply edit

  • 네 크롬이 없던 시절 멍청한 브라우저들을 똑똑하게 만들어주는 기어스 플러그인이 제시한 스펙 중 하나입니다. 사용 방법 역시 매우 흡사합니다. 플러그인이냐 아니냐, 브라우저가 수용했느냐 말았느냐의 차이일 뿐입니다. 앞으로 브라우저들은 특정집단에 귀속된 서드파티 플러그인의 도움 없이도 스스로 처리할 수 있도록 표준을 끊임없이 고안하고 추가해 나갈 것입니다. 다음 세대 브라우저들은 로컬서버까지 포함될지도 모르겠습니다.

    reply edit

Your Reaction Time!

captcha

avatar