如果我理解正确的话,那么Node JS是非block的......所以不是等待数据库或其他进程的响应,而是转移到其他进程并稍后再进行检查。
它是单线程的。
所有这一切意味着给定的节点JS过程可以完全有效地利用单个CPU内核,但它不会使用机器上的任何其他内核,因为它一次不会使用多个内核。
这当然意味着其他CPU仍然可以被其他进程用于SQL数据库或其他有意分离的CPU重子程序,只要它们是独立的进程。
我的理解正确吗?
非常正确。node.js服务器有一个内部线程池,因此它可以执行block操作并在事情完成时用回调或事件通知主线程。
所以我想它会限制使用另一个线程池的核心,例如,如果你做了一个非block的文件系统读取,这可能是通过告诉线程池中的线程执行读取和设置回调时实现的它的完成意味着读取可能发生在不同的线程/核心上,而主要的node.js程序正在做其他事情。
但是从node.js的角度来看,它完全是单线程的,不会直接使用多个核心。
这篇文章中的一段:
Apache是多线程的:它在每个请求(或进程,它依赖于conf)生成一个线程。可以看到,随着并发连接数量的增加,以及需要更多的线程来服务多个同期客户端,同时这种开销是很消耗内存的。Nginx和Node.js不是多线程的,因为线程和进程占用大量内存。它们是单线程的,但基于事件。这通过处理单个线程中的许多连接,消除了数千个线程/进程创建的开销。