Nodejs多线程与nodejs单线程

时间:2016-02-15 08:33:22

标签: node.js multithreading

我不了解java多线程系统和Nodejs mutltithread系统在性能和资源共享方面的区别。由于NodeJS为您的程序使用事件循环单线程,但在场景后面,它将任务分配给不同的线程,如文件读取或数据库查询。那么它使用多线程和线程池(类似于Java?)。 但无论何时我们比较性能,NodeJS应用程序都远胜于其他多线程系统。

NodeJS实际上如何处理多线程编程挑战,如溢出或锁定线程。它如何在线程之间共享资源,例如我使用两个I / O同时访问同一个文件,因此将有两个线程访问一个资源,它是否适用于NodeJS多线程系统?或者我误解了这一点?

1 个答案:

答案 0 :(得分:2)

这是我2便士的价值......

多线程功能

  • 真相:Node.js(当前)在低级别执行/处理线程意义上不提供对多线程的本机支持。 Java及其实现/框架为多线程提供原生支持,并且也广泛支持(抢占,多租户,同步多线程,多任务,线程池等)

  • Pants on Fire(ish):在Nodejs中缺少多线程是一个显示停止。 Nodejs围绕事件驱动的体系结构构建,尽可能快地生成和使用事件。本机支持功能回调。根据应用程序设计,这种高级功能可以支持线程可以完成的任务。小号

  • 对于服务器端应用程序,在应用程序级别,重要的是能够同时执行多个任务:即多任务。有多种方法可以实现多任务处理。多线程是其中之一,并且非常适合任务。也就是说,“多线程”的概念是一个低级平台方面。例如,在单核心流程服务器(具有1个CPU处理器核心的服务器)上托管/运行的多线程平台(例如java)仍支持应用程序级别的多重复用,映射到低级别的多线程,但实际上,只有一个线程可以在任何准时执行。在具有4个内核的多核机器上,支持应用程序级别的相同多任务,并且在任何给定时间最多可同时执行4个线程。关键是,在大多数情况下,真正重要的是对多任务的支持,这并不总是多线程的同义词。

  • 回到node.js,真正的讨论应该是应用程序设计和架构,更具体地说,是对MULTI-TASKING的支持。通常,服务器端应用程序与客户端应用程序或独立应用程序之间存在整体范式转换,在设计和流程方面更是如此。除此之外,服务器端应用程序需要与其他应用程序(在服务器上)一起运行,需要具有弹性和自包含(在应用程序失败或崩溃时不影响服务器的其余部分),执行强大的异常处理(即从错误,甚至是关键错误)并且需要执行多项任务。

  • 支持多任务的能力是任何服务器端技术的关键能力。而node.js具有此功能,并以易于使用的包装呈现。这意味着服务器端应用程序的设计需要更多地关注多任务处理,而不仅仅关注多线程。是的,在支持多线程的服务器端平台上工作有其明显的好处(增强的功能,性能),但仅凭这一点并不能解决在应用程序级别支持多任务的需求。服务器端应用程序的任何可靠的应用程序设计,AND node.js必须基于事件生成和消费(事件处理)的多任务。在node.js中,使用函数回调和小事件处理器(作为函数),在事件处理实例中使用数据检查点(在文件或数据库中保存处理数据)是关键。