Node.js多线程。
是否可以在Node.js中使用多线程?如果是的话。
在Node.js中使用多线程有哪些优缺点?哪些模块可以在Node.js中实现多线程?我是Node.js的新手,我从许多博客中读到,说Node.js是单线程的。
我知道java多线程但我需要知道它是否可以在Node.js中使用。
答案 0 :(得分:59)
是和否。让我们从头开始。为什么NodeJs是单线程的,这里解释Why is Node.js single threaded?
虽然Node.js本身是多线程的 - I / O和其他此类操作从线程池运行 - 但是出于所有实际目的,Node.js执行的JavaScript代码在单个线程中运行。这不是Node.js本身的限制,而是V8 JavaScript引擎和JavaScript实现的限制。
Node.js包括一个用于集群多个Node.js进程的本机机制,其中每个进程在一个单独的核心上运行。但是,该集群机制不包括任何本地路由逻辑或工作者之间的共享状态。
一般而言,更明确的说法是,每个node.js进程都是单线程的。如果你想要多个线程,你也必须有多个进程。 例如,您可以使用子进程,这在此处描述http://nodejs.org/api/child_process.html。只是为了您的信息,请查看本文,非常有启发性且写得很好,如果您想使用child_processes,可能会对您有所帮助 - https://blog.scottfrees.com/automating-a-c-program-from-a-node-js-web-app
尽管如上所述,你可以用C ++和本地nodejs C ++开发实现一种多线程。
首先查看这些答案,可能他们会帮助你,
How to create threads in nodejs
Node.js C++ addon: Multiple callbacks from different thread
https://bravenewmethod.com/2011/03/30/callbacks-from-threaded-node-js-c-extension/
当然,您可以找到并利用许多提供“多”线程功能的节点插件:https://www.npmjs.com/search?q=thread
此外,您还可以查看 JXCore https://github.com/jxcore/jxcore JXCore 是Node.js的分支,允许Node.js应用程序在同一进程中的多个线程上运行。所以很可能 JXCore 是适合您的解决方案。
“在Node.js中使用多线程有哪些优点和缺点?”
这取决于你想做什么。如果您正确地利用和使用Node.js源,并且您的“多个” - 线程插件或进程或其他任何内容,不会“破解”或滥用来自V8或Node.js核心的任何内容,则没有任何缺点!
正如在每个答案中一样,正确答案是“使用正确的工具来完成工作”。 当然,由于节点是按设计单线程的,因此您可以有更好的多线程方法。
许多人使用的技术是在C ++,Java,Python等中创建多线程应用程序,然后通过自动化和Node.js child_process运行它(第三方应用程序与自动化异步运行,你有更好的性能(例如C ++应用程序),你可以在Node.js应用程序中发送输入和输出。)
缺点多线程Node.js
请记住,如果你想通过修改它来在Node.js中创建一个纯粹的多线程环境,我认为由于复杂性,这将是困难的,有风险的,而且你必须始终与每个新的一致。 V8或Node版本可能会影响这一点。
希望这有帮助。
答案 1 :(得分:5)
不,你不能在node.js中使用线程。它使用代码执行的异步模型。在异步模型的后面,节点本身使用线程。但据我所知,如果没有额外的库,就无法在应用程序中访问它们。
使用异步模型,您实际上不需要线程。这是一个简单的例子。通常,在多线程环境中,您将在每个线程中运行网络请求,以阻止主线程中的代码执行。使用异步模型,这些请求不会阻塞主线程并仍然在其他线程中执行,只有这对您来说是隐藏的,这使得开发过程变得简单。
另请查看bazza的this comment。