Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

is it possible to achieve multithreading in nodejs? [duplicate]

Node.js multithreading.

Is it possible to use multithreading in Node.js? if yes.

What are the advantages and disadvantages of using multithreading in Node.js? Which are those modules that can be achieve multithreading in Node.js? I am a newbie to Node.js, I read from many blogs saying that Node.js is single threaded.

I know the java multithreading but I need to know whether it is possible in Node.js or not.

like image 209
Umakant Mane Avatar asked Oct 13 '16 18:10

Umakant Mane


People also ask

Is it possible to achieve multithreading in NodeJs?

You can achieve multithreading by generating multiple nodes or Node. js V8 engines which in isolation are single-threaded. It is still correct to say Node. js is not multi-threaded.

Is node JS multithreaded True or false?

Single thread: Node JS Platform doesn't follow the Multi-Threaded Request/Response Stateless Model. It follows the Single-Threaded with Event Loop Model. Node JS Processing model mainly inspired by JavaScript Event-based model with JavaScript callback mechanism.

Is node JS really single threaded?

No. NodeJs is not single threaded. The NodeJs event loop operates on a single thread yes, but the async blocking operations are delegated to separate worker threads. These threads notify the main thread when they are done processing.

Is NodeJs Async multithreaded?

No, the answer doesn't have to be multi-threaded.


2 Answers

No, you can't use threads in node.js. It uses asynchronous model of code execution. Behind the asynchronous model, the node itself uses threads. But as far as I know, they can't be accessed in the app without additional libraries.

With the asynchronous model you don't actually need threads. Here is a simple example. Normally, in multi-threaded environments, you would run networks requests in each thread to not block the execution of code in main thread. With async model, those requests do not block the main thread and are still executed in other threads, only this is hidden from you to make development process straightforward.

Also check this comment by bazza.

like image 24
Max Koretskyi Avatar answered Sep 17 '22 14:09

Max Koretskyi


Yes and No. Let's start from the beginning. Why is NodeJs single-threaded, is explained here Why is Node.js single threaded?

While Node.js itself is multithreaded -- I/O and other such operations run from a thread pool -- JavaScript code executed by Node.js runs, for all practical purposes, in a single thread. This isn't a limitation of Node.js itself, but of the V8 JavaScript engine and of JavaScript implementations generally.

Node.js includes a native mechanism for clustering multiple Node.js processes, where each process runs on a separate core. But that clustering mechanism doesn't include any native routing logic or shared state between workers.

Generally and more clearly the statement is that, each node.js process is single threaded .if you want multiple threads, you have to have multiple processes as well. For instance,you can use child process for this, which is described here http://nodejs.org/api/child_process.html . And just for your info, check out also this article, is very instructive and well written, and possibly will help you, if you want to work with child_processes -- https://blog.scottfrees.com/automating-a-c-program-from-a-node-js-web-app

Despite of all of the above, you can achieve a kind of multi-threading with C++ and native nodejs C++ development.

First of all check out these answers, probably they will help you,

How to create threads in nodejs

Node.js C++ addon: Multiple callbacks from different thread

Node.js C++ Addon: Threading

https://bravenewmethod.com/2011/03/30/callbacks-from-threaded-node-js-c-extension/

Of course you can find and leverage a lot of node plugins which are giving "multi"-threading capability: https://www.npmjs.com/search?q=thread

In addition, you can check JXCore https://github.com/jxcore/jxcore JXCore is fork of Node.js and allows Node.js apps to run on multiple threads housed within the same process. So most probably JXCore is a solution for you.

"What are the advantages and disadvantages of using multi-threading in Node.js ?"

It depends of what you want to do. There are no disadvantages if you leverage and use Node.js sources correctly, and your "multi" - threaded plugins or processes or whatever, do not "hack" or misuse anything from the core of V8 or Node.js !

As in every answer, the correct answer is "use the right tools for the job". Of course, since node is by design single-threaded, you can have better approaches for multithreading.

A technique that a lot of people use, is to make their multi-threaded application in C++, Java, Python e.t.c and then, they run it via automation and Node.js child_process (third-party application runs asynchronously with automation, you have better performance (e.g C++ app), and you can send input and get output in and from your Node.js application).

Disadvantages multi-threading Node.js

Check this: https://softwareengineering.stackexchange.com/questions/315454/what-are-the-drawbacks-of-making-a-multi-threaded-javascript-runtime-implementat

Keep in mind that if you want to create a pure multithreaded environment in Node.js by modifying it, I suppose that would be difficult, risky due to the complexity, moreover you have to be, always up to date with each new V8 or Node release that will probably affect this.

Hope this helps.

like image 81
Lidakis Manolis Avatar answered Sep 20 '22 14:09

Lidakis Manolis