Node的基本原则是将应用程序放置在单线程(或单进程)中执行,同时异步处理所有事件。
典型的Web服务器(如Apache)是如何工作的。Apache可以采用两种不同的方式处理请求:一种是将传入的请求分配到
独立的进程中直至请求被处理完毕;另一种方式是为每一个请求生成单独的处理线程。
第一种方式(也称prefork multiprocessing model,或prefork MPM)可以根据Apache配置文件中指定的值创建多个子进程。使用进程的优势在于被请求的应用(如PHP应用)无需考虑线程安全问题;缺点是每个进程占用独立内存,内存消耗大,应用的扩展性也不好。
第二种方式(worker MPM)是进程-线程混合方式。Apache为传入的每个请求创建一个新的处理线程,这样多内存的使用更加有效。但这种方式要求应用必须是线程安全的。虽然现在流行的PHP语言是线程安全的,但无法保证和它一起被使用的各种库也是线程安全的。
不管哪种方法,它们都可以应对并发请求。如果五个用户同一时间访问一个WEB应用,并且服务器也进行了相应配置,那么WEB服务器就可以同时处理五个请求。
Node的处理方式与上面两种不同。当您启动Node应用程序时,他会被创建并运行在一个单线程上,Node会等待应用程序启动完成并开始捕获请求。在未处理完当前请求时,其它请求是不能被处理的。
这种处理方式听起来不是很有效率,如果Node是通过事件循环和回调函数实现异步运行(在Node中,事件循环一般是指轮询指定事件类型并在合适的时间调用事件处理程序,而回调函数就是事件处理程序)的话,他是不应该低效的。
实际上,与一般单线程应用不同,当Node应用程序接收到用户请求时&#x