2016-04-28 67 views
0

我想读取大小为200 MB的文件,并且需要60秒才能用其他技术读取(我使用java的Spring引导)。所以节点说它是异步的,它会在你的文件完成读取时使用回调,所以下一步将做什么,它会在读取文件之前直接显示成功消息,或者它会做什么。Node.js如何比其他技术更快?

+0

节点是不是更快的读/写比其他文件。编写在Node中并行使用多个I/O操作的代码对你来说更容易。你不会通过使用Node来获得极快的文件读取(至少,这不太可能);无论使用何种语言,它都将被设置为硬盘速度。 –

+1

理论上,多线程程序使用锁,信号量和其他工具来同步代码执行和并发数据访问。一个CPU内核一次只能运行一个执行线程,其实现方式是上下文切换。如果使用多个线程,则上下文切换的成本可能会很高,并会降低总体I/O性能。对于I/O绑定的任务,使用异步I/O更快。但是还有其他的异步库,不仅仅是node.js – nagylzs

回答

0

我想读的是大小为200 MB的文件,它需要60秒时间与其他技术来读取(我用Java的春季启动)

有没有办法,Java需要60秒阅读一个200 MB的文件。这不是语言或语言的执行速度缓慢 - 这是您的代码。

节点不是用于文件I/O特别快的平台。有些人甚至觉得很难编程。但看起来你碰巧写了一些快速的节点代码和一些慢的Java代码。

0

非常有趣的问题 - 而所有的反应都很大,我想触及这部分的质询:“将它直接读取文件或别的什么会做之前显示成功的消息。”

在这种情况下,整个想法是做其他的作品如果有,而文件中读取基础设施正在安装。

如果包括显示成功的消息,是的 - 它会做到这一点为好,但是这是不恰当的,因为这是错误的说法,该操作结束。理想情况下,人们可以编写不相关的代码,并且可以按照时间顺序与文件操作的状态无关地运行。节点将运行该代码,同时等待I/O。这就是它获得“明显”性能增益的地方 - 也就是说,我在一个线程中的多路复用任务。

  • 如果在应用程序的整个活动是读取一个巨大的文件,节点和Java之间的性能差异是不可见的,因为它会从语言的实现细节逃逸并进入到低级别的系统和设备操作,其中所有内容都以相同的方式运行,而不考虑主叫方的身份。

  • 如果应用程序中的活动是一组庞大的计算,那么与Java等相比,Node将启动性能很差。这是因为,JS语言的动态类型将通过需要额外的活动影响性能在代码中。

  • 如果应用程序中的活动是计算和I/O的自然组合,那么Node将胜过其他人,因为之前提到的复用效果将开始可见。

与引擎盖下的活动,此节点行为进一步详细说明是解释here

希望这有助于。