大话-node真的是单线程吗?

栏目: Node.js · 发布时间: 6年前

内容简介:老鸟:伸着懒腰,看着窗外明媚的阳光,喝一口清茶,心情大美。一天的好心情莫过于此。老鸟:菜鸟,你这消失了大半个月,忙什么呢?菜鸟:听说node最近很火,这不趁着年轻,多储存点知识储备呢!

老鸟:伸着懒腰,看着窗外明媚的阳光,喝一口清茶,心情大美。一天的好心情莫过于此。

老鸟:菜鸟,你这消失了大半个月,忙什么呢?

菜鸟:听说node最近很火,这不趁着年轻,多储存点知识储备呢!

老鸟:那你说说你对node的理解?

菜鸟:node的三大特点: 单线程,事件驱动,非阻塞I/O ...

老鸟:说说你理解的单线程?

菜鸟:打个比方:皇上处理朝政时,不需要事必躬亲,要学会放权。所有的朝政大臣向丞相报告,由丞相进行整理,并把最后的方案向皇上报告。由皇上进行定夺。

老鸟:理解的不错嘛,可你有没有想过, node既然是单线程,又是如何实现异步和非阻塞I/O呢?

菜鸟:node是事件驱动, 所有的事件做成一个队列,顺序执行的呀

老鸟:你这样说也没错, 但node是支持多线程的 。当你使用MAC的活动监视器你会发现,实际的进程数为6

const http = require('http');
  http.createServer((req, res) => {
    res.end('hello');
  }).listen(8000, () => {
    console.log('server is listening: ' + 8000);
  });

大话-node真的是单线程吗?

菜鸟:是因为 线程池 的原因吗?

老鸟:不错嘛,还知道线程池呢?但非也非也。

老鸟:首先,线程池是 按需创建 的,当你加载文件IO时,通过ab模拟访问后,你会发现,线程数发生了变化,这是因为, 线程池中默认的默认值为4。

菜鸟:竟然不是线程池?

老鸟:你忽视了 node集成了V8引擎?Node.js启动后会创建V8实例,而V8实例是多线程的。

菜鸟:若有所思中...

老鸟:主线程在任何时候,都不会阻塞吗?

菜鸟:老鸟,经你这么一分析,我可不敢肯定的回答了

老鸟:当然不是的。主线程在特定条件下也是会阻塞的。Node.js的事件循环中有一个阶段是Poll。poll阶段在特定情况下是会阻塞的。

老鸟:当然,你也不要羞愧,知识是永无止境的,我只是提醒你,要不断探索,不断质疑,才能不断求知。

菜鸟:受教了,给你点个赞,顺便收藏一下

参考资料

https://nodejs.org/en/docs/gu...


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Book of CSS3

The Book of CSS3

Peter Gasston / No Starch Press / 2011-5-13 / USD 34.95

CSS3 is the technology behind most of the eye-catching visuals on the Web today, but the official documentation can be dry and hard to follow. Luckily, The Book of CSS3 distills the heady technical la......一起来看看 《The Book of CSS3》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器