首页 > 解决方案 > 节点中的线程与其他编程语言

问题描述

因为线程对 Node.js 来说是新的,如果有人可以将 node.js 中的线程与 C++ 和 Java 等其他编程语言进行比较,那将是有益的。请特别回答以下问题?

与 C++ 和 Java 等其他编程语言相比,node.js中的线程实现有何异同?

node.js 应用程序的最大线程数是多少?

标签: node.jsmultithreading

解决方案


这是一个相当广泛的话题,人们可以写一本书的几个章节。我会尽量保持在一个相当高的水平,并给你一些需要考虑的事情。

与 C++ 和 Java 等其他编程语言相比,node.js 中的线程实现有何异同?

根本没有太多相似之处。Node.js 为每个线程创建一个单独的编程上下文。该编程上下文不共享对主线程或其他线程(如 C++ 或 Java)的常规变量的访问。相反,您使用某种消息在线程之间进行通信,这种消息会强制访问同步,并需要序列化/复制它们之间传递的数据(少数特殊的托管情况除外)。

在 C++ 中,要访问其他线程可以访问的数据,您必须使用互斥锁等工具来防止竞争条件。这种类型的编程对于具有良好设计和对细节的良好关注的强大、纪律严明的开发人员来说是非常可行的,但是在 C++ 中使用线程代码很容易出错,这可能会导致很难找到错误。因为 node.js 强制限制访问并通过消息传递强制同步,所以通常不会遇到相同类型的潜在问题。

node.js 应用程序的最大线程数是多少?

据我所知,node.js 应用程序中可以拥有的线程数没有编码限制。与任何语言一样,每个线程都会消耗资源,并且给定的系统配置和使用配置文件会有一些实际限制。但是,这只能通过针对给定情况的测试和反复试验来确定。如果您正在考虑一个具有大量线程的 node.js 应用程序,那么您可能正在为 node.js 架构寻求错误的设计,因为这对于异步 I/O 模型通常不是必需的或最佳的。

如果您只是要使用 CPU 密集型操作来运行所有线程,那么运行比 CPU 内核(或超线程的线程)更多的线程几乎没有性能或吞吐量优势,事实上,可能有一个劣势运行更多,因为任务切换的开销增加。这与使用 node.js 集群并决定在同一主机上运行多少集群实例时的讨论大致相同。

而且,对于任何多线程设计,您都必须完全了解瓶颈在哪里。如果每个人都在访问并依赖同一个数据库(例如),您可能会发现只有几个线程足以让数据库保持完全忙碌。


推荐阅读