Thread.js
dodano 07/01/2013
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