提到JS,可能就免不了单线程,事件机制,非阻塞I/O,异步I/O等等,这些词语。不能说理解的有多么深刻,想谈谈自己的一些看法。Node底层采用chrome V8 Javascript搜索引擎,其解析的速度快,性能稳定,提供了一个良好的解析环境。这一节从异步i/o机制来看看Node自身的特点。以下是流程图:
先来简单叙述一下Apache服务器的工作方式,它会为每一个请求开启一个线程,每一个线程会消耗一定的内存,所以在内存有限的情况下,请求数量也会有限制。但是Node采用异步机制,事件驱动的方式实现了高并发请求。如上图所示,在主线程里是单线程的,只需要将包装好的请求放进线程池中,不必等待数据完成即可继续执行后面的代码,不会阻塞主线程。线程池是多进程的,请求来到后,当线程可用便操作相应的I/O,将完成结果放入请求对象中并通知观察者事件已经完成。这时候,事件会一个一个排好队等待被执行。事件循环在进程启动后已经开始,它通过询问观察者是否有事件执行从而调用相应的回调函数。整个流程是如此,这样虽然代码是单线程的,但是整个过程其实是多线程在支持。这样的话,即使是多个请求到来,内部机制也能有条不紊的进行。