Nodejsmultithreadingvs nodejs单线程

我不明白javamultithreading系统和Nodejsmultithreading系统在性能和资源共享方面的差异。 由于NodeJS使用事件循环单线程为您的程序,但在幕后它将任务分配给不同的线程,如文件读取或数据库查询。 所以它使用multithreading和线程池(类似于Java?)。 但是,每当我们比较性能,NodeJS应用程序远远胜过其他multithreading系统。

实际上NodeJS如何处理像溢出或locking线程这样的multithreading编程挑战。 它是如何共享线程之间的资源,例如我正在访问同一个文件在同一时间与两个I / O,所以会有两个线程访问一个资源,是否适用于NodeJSmultithreading系统? 或者我误解了这一点?

Nodejs正在使用libuv来达到这个目的,这是写在C.

这就是为什么你不能比较Java和Nodejs,我们可以说,Nodejs正在使用底层机制来做asynchronousIO。

为nodejsdevise的libuv,但它可以在任何项目中使用。

你提到asynchronous磁盘操作 – 你可以在这里find好的post。

简洁版本:

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

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

你提到的另一件事 – 事件循环。 没有什么困难的 – 这很容易理解,例如你可以阅读 这个好post。

这是我的2便士值得…

multithreadingfunction

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

  • 裤子着火(ish):在Nodejs中缺lessmultithreading是一个阻碍。 Nodejs是围绕事件驱动的体系结构构build的,其中事件的生成和消耗尽可能快。 有functioncallback的本机支持。 根据应用程序devise,这个高级function可以支持线程所能做的事情。 小号

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

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

  • 只要能够支持多任务是任何服务器端技术的关键function。 而node.js具有这种能力,并提供了一个非常易于使用的包装。 这一切都意味着重要的侧面应用程序的devise需要更多地关注于多任务处理,而不仅仅是multithreading处理。 是的,在一个支持multithreading的服务器端平台上工作有明显的好处(增强的function,性能),但是这并不能解决在应用程序级支持多任务的需要。 任何为服务器端应用程序devise的可靠应用程序AND node.js都必须基于事件生成和消耗(事件处理)的多任务处理。 在node.js中,使用函数callback和小事件处理器(作为函数),在事件处理实例之间使用数据检查点(保存处理数据,在文件或数据库中)是关键。