node.js - 节点中的线程与其他编程语言
问题描述
因为线程对 Node.js 来说是新的,如果有人可以将 node.js 中的线程与 C++ 和 Java 等其他编程语言进行比较,那将是有益的。请特别回答以下问题?
与 C++ 和 Java 等其他编程语言相比,node.js中的线程实现有何异同?
node.js 应用程序的最大线程数是多少?
解决方案
这是一个相当广泛的话题,人们可以写一本书的几个章节。我会尽量保持在一个相当高的水平,并给你一些需要考虑的事情。
与 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 集群并决定在同一主机上运行多少集群实例时的讨论大致相同。
而且,对于任何多线程设计,您都必须完全了解瓶颈在哪里。如果每个人都在访问并依赖同一个数据库(例如),您可能会发现只有几个线程足以让数据库保持完全忙碌。
推荐阅读
- vba - 如果主 ODBC DSN 不存在,则使用备用 ODBC DSN
- linq - 如何将此 SQL 查询转换为 EF Core 中的 LINQ 查询?
- graphql-js - “只能创建 Nullable GraphQLType 的 NonNull 但得到:ID”
- excel - 如何处理 Excel 中的“数字存储为文本”?
- java - 使用 Streams 将嵌套的 for 循环从 Java 7 转换为 Java 8
- c++ - 计数变量没有增加,因为程序应该像它应该的那样迭代——在用重复数字计算数字的程序中
- python - 我怎样才能在这里加快我的代码?尝试迭代和替换每一行中的某些值。身体细节
- java - Google Play 要求从受影响的应用程序中删除 Install_referrer
- javascript - 重定向传递道具
- java - 如何在Azure服务总线中一直监听队列并拦截每条消息