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.