Jeśli się nie mylę, szukasz czegoś podobnego do wielowątkowości i/lub liczenia wielu rzeczy w tym samym czasie.
Wiele egzekucje naraz
SIMD zaczyna się znaleźć drogę do przeglądarek, z wdrożeń węzeł nie daleko w tyle. Spójrz na node-simd lub MDN SIMD (browsers). SIMD jest wciąż eksperymentalna i działa tylko na obsługiwanych procesorach (oczywiście, ponieważ nie wszystkie procesory mają tę funkcjonalność). Wykonuje wiele rzeczy naraz, przykład porównując do normalnych JS SIMD JS byłoby:
// Normal addition, 4 actions are executed.
var a = [1, 2, 3, 4];
var b = [5, 6, 7, 8];
var c = [];
c[0] = a[0] + b[0];
c[1] = a[1] + b[1];
c[2] = a[2] + b[2];
c[3] = a[3] + b[3];
c; // Array[6, 8, 10, 12]
// SIMD execution - all additions are processed simultaenously through the CPU
var a = SIMD.Float32x4(1, 2, 3, 4);
var b = SIMD.Float32x4(5, 6, 7, 8);
var c = SIMD.Float32x4.add(a,b);
c; // Float32x4[6, 8, 10, 12]
Wielowątkowość
W odniesieniu do wielowątkowości, webworkers
istniały w środowisku przeglądarki na chwilę teraz. Zostało to całkowicie przeniesione do Węzła zgodnie ze specyfikacją HTML, jak widać in this repository.
Oto good explanation co do tego, dlaczego webworkers
zostały nawet przeniesione do Węzła, ponieważ można już uruchamiać procesy potomne w innych wątkach i na innych procesorach z modułem child_process
. node-webworker
to świetny moduł, ponieważ każdy proces jest uruchamiany w ramach kontekstu on i w swoim własnym procesie node
, więc jest naprawdę wielowątkowy z węzłem.
Aby uruchomić różne procesy na różnych procesorach, należy zastosować node-webworker
lub użyć child_process
w celu odrodzenia innych wątków w celu wykonania osobnych akcji w tym samym czasie z różnymi rdzeniami procesora. node-webworker
może nasłuchiwać zdarzeń za pomocą znanego interfejsu API postMessage
, a child_process
będzie komunikować się przez stdin/stdout/stderr
.
Mam nadzieję, że odpowiedzi na swoje pytanie :)
Odniosłem wrażenie, że istniała co najmniej [w jedną stronę] (https://www.npmjs.com/package/webworker-threads), aby utworzyć wiele przepływów wykonawczych, które mogą działać równocześnie, komunikując się, przekazując wiadomości do wzajemnie. Czy tak nie jest? –
@DavidSchwartz, nie masz racji, to podejście może używać 'child_process' i implementować przekazywanie wiadomości z zdarzeniem' child_process.on ('message') 'w procesie nadrzędnym i funkcją' process.send() 'w podrzędnym procesie proces. Chciałem również ograniczyć moją odpowiedź na to, co zapewnia Node.js w ramach jego podstawowej funkcjonalności, a nie jakie pakiety mogą potencjalnie zapewnić. – peteb