专栏首页雪山飞猪Node.js能解决什么问题?

Node.js能解决什么问题?

一、使用Node.js能解决什么问题

对于PHP、JAVA、Python等服务端语言中,为每个客户端连接创建一个新的线程,而每个线程需要大约2M的内存,理论上,具有8GB内存的服务器可以同时连接的最大用户数为4000个左右,要让Web应用程序支持更多的用户,就需要增加服务器的数量,这样硬件的成本就增加了。 服务器所支持的最大同时连接用户量是一个主要的瓶颈。

Node.js是一个用于开发各种Web服务器的开发工具,运行的是高性能的V8 JavaScript脚本语言, 什么是V8JavaScript? V8 JavaScript是由Google公司使用C++语言开发的一种高性能JavaScript,该引擎并不局限于在浏览器中运行。在V8引擎内部使用了一种全新的编译技术,高端的JavaScript脚本代码与开发者编写的低端的C语言具有非常相似的执行效率

二、Node.js的两种机制

  1. 非阻塞型I/O JavaScript的一个特点是它只支持单线程,因此不需要担心会造成死锁的现象。 与客户端脚本语言不同的是,Node.js中为V8 JavaScript提供了非阻塞型I/O机制。 例如,在访问数据库取得搜索结果的时候,在开始访问数据库之后、数据库返回结果之前,存在一段时间的等待。 在传统的单线程处理机制中,在执行了访问数据库的代码之后,整个线程都将暂停下来,等待数据库返回查询结果之后才能继续执行其后面的代码。也就是I/O操作阻塞了代码的执行,极大的降低了程序的执行效率。 由于Node.js中采用了非阻塞型I/O机制,因此在执行访问数据库的代码之后将立即转而执行其后面的代码,把数据库返回结果的处理代码放在回调函数中执行,从而提高了程序的执行效率。
  2. 事件环 在Node.js中,在一个时刻只能执行一个事件回调函数,但是在执行一个事件回调函数的中途可以转而执行其他事件,然后返回继续执行原事件回调函数,这种处理机制叫事件环机制

三、Node.js适合什么开发场景?

当应用程序需要处理大量并发的输入/输出,而在向客户端发出响应之前,应用程序内部并不需要进行非常复杂的处理的时候

  1. 聊天服务器 在一个人气很高的聊天应用程序中,在同一时刻通常可能存在大量用户与聊天服务器之间的并发连接,而服务器本身并不存在非常复杂的处理
  2. 综合服务类网站 、电子商务网站的服务器 这类网站中,往往可能在每秒钟内接收到多达上千条数据并且需要将这些数据写到数据库中,如果使用其他的服务器(Apache或Tomcat),需要为每条数据的写入等待一段时间。而Node.js将通过其队列机制将这些数据迅速写到缓存区中,再通过每一个单独的处理从缓存中取出这些数据再写到数据库中,因为其使用的是非阻塞型的I/O机制,因此可以同时实现这些数据到数据库中的写入,而不必为每条数据等待一段时间

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • express捕获全局异常的三种方法

    express的路由里抛出异常后,全局中间件没办法捕获,需要在所有的路由函数里写try catch,这坑爹的逻辑让人每次都要多写n行代码 官方错误捕获中件间代...

    雪山飞猪
  • node.js中this指向失效解决

    原因:虽然类默认的方法指向类的实例,但是如果在外部单独使用该方法,this会指向该方法运行时所在的环境,不再指向对象

    雪山飞猪
  • 消息队列小总结

    消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为: 当不需要立即获得结果,但是并发量又需要进行控制的时候,差...

    雪山飞猪
  • 3-1 Loader是什么

    前面说过,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler),我们也看到了webpack对js文件的打包...

    love丁酥酥
  • SQLite 并发的四种处理方式

    SQLite 是一款轻型的嵌入式数据库它占用资源非常的低,处理速度快,高效而且可靠。在嵌入式设备中,可能只需要几百 K 的内存就够了。因此在移动设备爆发时,它依...

    BigNerdCoding
  • 如何对python的bytes类型数据s

    py3study
  • LVS+Keepalived高可用环境部署梳理(主主和主从模式)

    在介绍LVS之前,先介绍下集群的概念 计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义...

    洗尽了浮华
  • JSPatch Platform平台的简单使用

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

    用户1451823
  • Eclipse 实用技巧

    代码智能提示 Java智能提示 Window -> Preferences -> Java -> Editor -> Content Assist -> Aut...

    静默虚空
  • 2019 年 11 个受欢迎的 JavaScript 动画库!

    超过46K的star,这个流行的库提供了非常多的3D显示功能,以一种直观的方式使用 WebGL。这个库提供了canvas、 svg、CSS3D 和 WebGL渲...

    我就是马云飞

扫码关注云+社区

领取腾讯云代金券