大佬教程收集整理的这篇文章主要介绍了初识 Node.js,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Node.js 专注于实现 web 高性能的服务器,是一个让 JavaScript 运行在服务器上的平台。他使用 Chrome 浏览器的 V8 引擎作为 JS 代码的解释工具,底层使用 C++ 进行开发,而 V8 引擎也正是基于 C++ 开发的。
Node.js 并不是一种新的语言,他是基于 JavaScript 实现的,但是他让 JavaScript 焕发出了新的活力,将 JavaScript 的触角伸到了服务器端。
Node.js 和传统的服务器端程序的最大区别在于 Node.js 没有 Web 容器的概念。一般来服务器程序比如 PHP、JSP、Python、Perl、Ruby 等都需要运行在 Web 容器中才能被访问,最常用的 Web 容器比如说 Apache、Nginx 等。但是 Node.js 没有!通过对于顶层路由的设计能够制定出很简洁清晰的 URL。
Node.js 的另一大特点在于他是单线程的,整个 Node.js 程序运行在单一的一个线程上。
一个 Java Web 项目,用户发起请求会为其创建一个线程,而每一线程都需要占用一定的内存,所有对于服务器的要求会随着用户数的增加而增加,硬件成本也相应提高。同时使用多线程会存在上下文切换和线程销毁的开销,如果使用单线程就能避免这些应为多线程带来的系统开销,提高系统运行效率。
Node.js 不会为每个用户创建一个新的线程,而是使用同一个线程接收所有的请求。使用一个线程在面对多个用户请求时,Node 不能像多线程那样并行地对其进行处理。在单线程上我们顺次执行程序,在一个请求没有执行完的时候,线程就会阻塞,下一个请求就无法进行。
为了应付单线程的阻塞问题,Node 使用了非阻塞 I/O 机制。
处理一个请求时最耗时的操作是各种 I/O 操作,最频繁的就是对数据库的读写操作,或者是对文件的读写操作。在单线程中如果执行到 I/O 操作,则线程会在此阻塞等待返回结果。
Node 为了应付费时的 I/O 操作使用了非阻塞 I/O 模式。当程序一旦执行到了 I/O 操作的部分,则立即将 I/O 操作交给回调函数,自己则继续执行后面的程序。
这里就有两点需要注意的。
一是执行回调函数之后的代码不能依赖回调函数的结果。比如用户登录的操作,需要查询数据库验进行校验,之后的登录操作需要依赖回调的结果,此时必须等待返回校验结果才能进行登录操作。
二是执行回调函数之后何时再继续执行。所以必须要有事件循环,回过头来继续执行操作,就需要不断检查线程上有没有没有处理完的事件,排队实现他们。
因此 Node 的这条线程一直处于运行状态不会阻塞,cpu 的利用率一直很高。
Node 的第三个特点就是事件驱动。也就是前面讲的在线程执行 A 操作的过程中采用回调函数的形式转而处理 B 事件,在 B 事件处理完之后再去执行 B,如网上一张图片所示:
事件在循环执行之中,当遇到 I/O 操作则采用回调函数处理,处理完的事件则会排队等候再次执行,形成了一个个的事件环。
Node 通过非阻塞 I/O 的机制和事件驱动的方式让单线程的程序实现了多线程的效果。让一个线程永远处于忙碌的状态,不会造成资源的浪费。这样就能降低硬件的成本却不会影响程序执行的效率。
以上是大佬教程为你收集整理的初识 Node.js全部内容,希望文章能够帮你解决初识 Node.js所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。