Node.js 多线程-节点js效率vs Apache

Node.js 多线程-节点js效率vs Apache,node.js,multithreading,apache,event-loop,Node.js,Multithreading,Apache,Event Loop,据我所知,NodeJS在内部处理线程。所以,如果一个HTTP请求进入,并且需要一些密集的I/O操作,节点就会产生另一个线程来处理I/O操作,同时继续在其主线程中侦听传入的HTTP请求。另一方面,在Apache上运行的PHP中,每个HTTP请求都有自己的线程来处理它。总之,在这两种情况下都有两个线程在运行,对吗?那么,与Apache相比,node的性能提高了多少呢?在基于事件的服务器(如node或大多数现代Java EE服务器)中,单个(或几个线程)轮流为许多其他不相关的客户端连接在一个线程上的工

据我所知,NodeJS在内部处理线程。所以,如果一个HTTP请求进入,并且需要一些密集的I/O操作,节点就会产生另一个线程来处理I/O操作,同时继续在其主线程中侦听传入的HTTP请求。另一方面,在Apache上运行的PHP中,每个HTTP请求都有自己的线程来处理它。总之,在这两种情况下都有两个线程在运行,对吗?那么,与Apache相比,node的性能提高了多少呢?

在基于事件的服务器(如node或大多数现代Java EE服务器)中,单个(或几个线程)轮流为许多其他不相关的客户端连接在一个线程上的工作提供服务。这种共享/合作的管理方式可以采取多种形式(例如,某些语言中的coutroutines、严密管理的状态机和某些服务器中的continuation processing),但净收益是:

  • 没有上下文切换,因为不同的线程恢复了生命
  • 不需要/几乎不需要线程同步
  • 更大的垂直可扩展性
一些不利因素包括:

  • 更复杂的开发
  • 某些错误的代码/扩展可能导致数千个请求暂停的风险

NodeJS使用异步/io,您不需要为上下文切换付费——您可以说开销是“成批的”。这些线经久耐用。