NodeJS je báječný, a to hlavně díky svému Async I/O. Dalším silným znakem je to, že NodeJS je Single Threaded Event Loop Architecture. Jednoduché, čitelné a výkoné paradigma pro webové aplikace stavějící na Request/Response modelu.
Na základě tětchto principů se NodeJS moc nehodi na takové věci, jako je Machine Learning, nebo Artificial Intelligence, jinými slovy, úlohy závislé na silné paralelizaci. Byť vzhledem k tom, že je samotný javascriptový engine napsaný v C++ a nabízí tak dost vysoký výkon.
Tedy až do teď! 🙂
Od verze 10.5.0 umí NodeJS pracovat s vlákny! Což z něj dělá prostředí vhodné i pro věci kolem strojového učení a umělé inteligence. Funkcionalitu vláken přináší modul worker_threads.
Modul je dostupný od verze 10.5.0 a jen v při spuštění s paramatrem
--experimental-worker, protože se zatím jedná o novinku.
Příklad spuštění javascriptového kódu v několika, v tomto případě ve 2 vláknech.
// index.js
const worker = require('worker_threads');
let data = undefined;
if (worker.isMainThread) {
data = 'the data';
const child = new worker.Worker(__filename, { workerData: data });
console.log('master send to slave: ', data);
child.on('message', mes => console.log('master obtain from slave:', mes));
} else {
data = worker.workerData;
console.log('slave obtain from master: ', data);
data = data.toUpperCase();
worker.parentPort.postMessage(data);
}
Z příkladu je jasné, že v procesu potomka můžete spouštět jakýkoliv javascriptový kód, sdílet s rodičovským procesem proměnné (paměť) a také posílat si navzájem zprávy. Vše, co byste po vícevláknových aplikací požadovali.