Nodejs学习心得沉淀(一)——nodejs的核心概念

nodejs的核心概念

经过一周对于极客时间、博客文章、技术专栏有关Nodejs内容的学习,个人对于Nodejs的理解更加深入但是不够透彻,因此撰写这篇博客来总结沉淀自己所学内容,也希望可能的话,能够帮助到同样在学习Nodejs的你


以下是笔者学习Nodejs所用的资源
1.TaoPoppy大佬撰写的博客,内容精要,很值得借鉴!
2.七天学会Nodejs
(虽然是标题党,但内容做的真的很细致,入门Nodejs是完全没问题)
3.腾讯高级工程师杨浩的Node.js开发实战
如果你想了解大公司中是如何使用Nodejs的,是非常不错的课程资源
4.JavaScript深入浅出

nodejs的本质

笔者认为,Nodejs的核心概念有三个,分别是非阻塞式I/O,基于Chrome V8引擎的JS运行环境、事件驱动机制

(1)非阻塞式I/O
首先我们先理解,什么是I/O?
从字面意义上去了解,I就是Input,O就是Output,所以I/O其实就是输入输出就是读写文件的过程就是你的计算机与其它计算机进行通信的过程
总之,只要是计算机发出信号、数据或者接收到信号数据的过程,都可以看作是I/O。并且,大多数计算机指令都是阻塞的,但是CPU的运算速度足够快,我们感知不到,而I/O操作操作耗费的资源多,因此较为明显。

有一天笔者认为需要提前说明,那就是Nodejs的异步特性其实是由于事件驱动机制和非阻塞式I/O这两个特性而形成的,所以异步并不等于I/O,但是概念上它们是相同的,笔者在后文中会进行介绍


那么什么是阻塞还有非阻塞呢?我们举一个很简单的栗子

小明的妈妈在出门前嘱托他要完成烧水、洗衣服、拖地、写作业这四件事,而这四件事分别需要耗费小明10,40,10,60分钟

首先,对于阻塞式I/O,小明这个进程就得一件事情一件事情的做过去,上一件事情没做完之前是不允许做下一件事情的,那么对于小明来说,完成这四件事情就需要总共120分钟,然后回来被妈妈暴揍一顿。

而如果是非阻塞I/O,就是小明这个进程不会傻傻的等着上一件事情做完,而是在上一件事情与下一见事情无直接关联的情况下,直接执行下一件事,这样小明这个单一的进程,完成事情的效率也就大大提高了~

(2)事件驱动机制

这个问题其实是由非阻塞式I/O如何在操作完成后,使得主程序感知到(或者说将完成结果告诉主程序),而引出的。

概括的说,就是设计一个队列,存放监视这个事件的处理函数,等待其它操作完成之后,再将这些处理函数从队列中取出执行,如果了解过vuejs响应式原理,我们其实可以从中找到共同之处。
也就是说,其内部的原理,就是一个观察者模式。

(3)Chrome V8引擎

我们写的JavaScript代码直接交给浏览器或者Node执行时,底层的CPU是不认识的,也没法执行。CPU只认识自己的指令集,指令集对应的是汇编代码,而写汇编代码是一件很痛苦的事情。
而Chrome V8引擎将JS代码编译为不同CPU(Intel, ARM以及MIPS等)对应的汇编代码,负责执行代码、分配内存以及垃圾回收,大大减少了开发者的负担。
再者,需要知道的是,Chrome V8引擎与Nodejs的不同之处在于,Nodejs少了浏览器的API,例如document,window等,但多了文件操作、进程管理等API。
引用杨浩老师的话来说

你在Chrome里面写JS来控制整个浏览器
nodejs用类似的方式让你控制整个计算机

小结:到此nodejs核心概念就讲解完成了,还是引用杨浩老师的话(感觉真的很好/(ㄒoㄒ)/~~)

对于Nodejs的理解需要个人的动手实践,别人和你说的再多也无法算作是真正的登堂入室,只不过是让你对于Nodejs有了那惊鸿一瞥罢了。

出于大家和笔者自己对于碎片化时间的利用,笔者会将所学拆分成一系列的章节,后续内容还有nodejs事件循环,nodejs可以用来做什么,核心功能模块理解,异步流程控制,nodejs并发、多线程操作等内容。

感谢阅读,欢迎批评指正,希望大家能够在追求卓越中不断进步,让优秀成为一种习惯~

你可能感兴趣的:(Nodejs学习心得沉淀(一)——nodejs的核心概念)