Thread.js

dodano 07/01/2013

rootBiblioteki \

Simple emulation of multi-threading in JS.

Prosta implementacja środowiska multiwątkowego w JavaScript, bazując na generatorach (nowych elementach języka dostępnych w JS 1.7).

Biblioteka rozwiązuje problem blokowania aktualizowania UI i zawartości strony podczas przetwarzania długich operacji w wątku JS. Zastosowanie generatorów ogranicza aktualnie wykorzystanie kodu do przeglądarki Firefoks (2.0+).

Algorytm szeregowania zaimplementowany w planiście (scheduler) zbliżony jest do algorytmu karuzelowego - Round-robin. Ograniczenia języka nie pozwalają na wywłaszczanie zadań, dlatego w niniejszej implementacji dokonuje tego sam wątek za pomocą operatora yield. Po wywłaszczeniu wątku, sterowanie zostaje przekazane do następnego zadania i tak wszystko toczy się w kółko. Przetwarzane w ten sposób zadania co pewien czas są przerywane na odpowiedni okres czasu, w czasie którego kontekst wykonania przekazany jest do silnika JS (przeglądarki) - wywłaszczenie przez główny wątek JS przeglądarki.

Bardziej dogłębny opis można znaleźć w dokumentacji na GitHubie oraz na dev-blogu autora, gdzie omówiono różne metody asynchronicznego wywoływania funkcji w JS i przetwarzania współbieżnego.

Example

Wraz z źródłami biblioteki można znaleźć prostą prezentację sposobu użycia i możliwości przez nią oferowanych. Inny przykład można znaleźć na dev-blogu, gdzie przedstawiono bibliotekę.

Licencja

Źródła udostępniane są na licencji MIT.

Źródła

Źródła biblioteki thread.js dostępne są na GitHubie.

Linki

Changelog

Wersja 1.2 (05/01/2013):

  • dodano status wątku
  • dodano implementację funkcji pause/resume

Wersja 1.1 (01/12/2011):

  • naprawiono wywoływanie callbacka finish
  • naprawiono usuwanie zakończonego wątku z kolejki
  • dodano proste zabezpieczenie przed operacjami na nie/istniejących danych wątku w interfejsie menadżera
  • dodano czas wykonywania wątku

Wersja 1.0 (07/08/2011):

  • pierwsze implementacja

aktualizacja 18/01/2013