node单线程异步模型

提到nodejs都知道单线程异步I/O,但是能说清楚为什么单线程异步I/O,为什么能增加网络吞吐量,怎么充分利用cpu资源嗯,这个知道的就不多了。

首先要说的是I/O,I/O是计算机的抽象概念,指的是键盘,鼠标,打印机,套接字等和内存之间的数据交换,I/O的速度是很慢的,知道计算机存贮模型的都知道,在这里面套接字被抽象成文件,有固定的ip和端口号,这就是网络I/O,当启动了node进程开了服务,监听了80端口。node就能读取这次连接操作,这就是网络I/O。 其实node本身并不是单线程的,而是多线程。I/O是有单独的线程池,并且多个I/O之间可以是并行操作的。

你可能会问,那node的单线程指的是什么呢?其实它是指node中对js的执行是单线程的。 你可能会问,node相对与其他语言,为什么吞吐量大呢?其实这里涉及到事件循环机制。有的语言一个进程对应一个连接,这是很耗费性能的。有的是一个线程对应一个连接。我们知道进程线程间切换比较耗费性能。node的单线程是当一个请求到达时,node线程根据套接字生成一个请求对象,然后将这个请求对象发送个事件循环,由事件循环调用业务逻辑。一旦生成请求对象,该线程就能接受新的请求。而不用等待业务代码结束。 node的事件循环又是什么东西呢?其实这就是单线程实现异步的原理。一旦有事件进入,就会生成事件循环。这里可能又有疑问,这样的事件循环不是耗费cpu性能吗?事件没有结束一直循环,其实不会的参考前面的文章node事件循环。

猜你喜欢

转载自www.cnblogs.com/node-jili/p/10161410.html