Nodejs多线程与nodejs单线程


薄情
2025-03-17 02:44:17 (1小时前)
  1. 我不明白java多线程系统的区别


的NodeJS
</跨度>
在性能和资源共享方面的多线程系统。如

的NodeJS
</跨度>
为你的程序使用事件循环单线程但是…在场景后面它将任务分配给不同的线程,如文件读取或数据库查询。那么它使用多线程和线程池(类似于Java?)。
但无论何时我们比较性能,

的NodeJS
</跨度>

3 条回复
  1. 0# 夏花 | 2019-08-31 10-32



    Nodejs正在使用

    libuv

    为了这个目的,这是用C写的。



    这就是为什么你不能比较Java和Nodejs,我们可以说,Nodejs正在使用低级机制来制作异步IO。



    libuv是为nodejs设计的,但它可以在任何项目中使用。



    你提到异步光盘操作 - 你可以找到关于它的好帖子

    这里




    精简版:




    使用异步磁盘I / O,而不是0.16.x版本的磁盘线程中的同步磁盘调用。




    这意味着什么?这意味着您可以使用相同的方法(异步低级IO操作),我敢打赌,您可以使用例如Java提高相同的速度。



    你提到的另一件事 - 事件循环。没有什么比这更难了 - 理解很容易,例如你可以




    这个

    好帖子。


  2. 1# 生如夏花 | 2019-08-31 10-32



    这是我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中,使用函数回调和小事件处理器(作为函数),在事件处理实例中使用数据检查点(在文件或数据库中保存处理数据)是关键。


登录 后才能参与评论