zoukankan      html  css  js  c++  java
  • 什么是node

    写在前面:初学node,打算写个系列教程,有不当的地方,还请多多指正。

    什么是node

    node官网上对node的定义是:

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。

    首先node不是一门新语言(这不是废话嘛。。。),是JavaScript的运行时,但与JavaScript又有不同,既node中没有BOM和DOM相关的概念和api,node是运行在服务器端的JavaScript。
    node与JS的区别

    node的特点

    作为后端JavaScript的运行平台,Node保留了前端浏览器JavaScript中那些熟悉的接口,灭有改写语言本身的任何特性,依旧基于作用域和原型链,区别在于它将前端中广泛运用的思想迁移到了服务器。来看看node相对其它语言的一些特点。

    非阻塞式 I/O

    1.什么是I/0: 文件操作、网络操作、数据库操作等。 对应的还有一个CPU操作:压缩、解压、加密、解密。
    2.阻塞:进程休眠等待当前进程完成后才能进行下一步。对应的非阻塞概念:函数立即返回,进程不等待当前进程完成。

    事件驱动

    I/0等异步操作结束后的通知。
    太抽象,来举个例子:
    快餐店点餐。在基于线程的方式中(thread-based way)你到了柜台前,把你的点餐单给收银员或者给收银员直接点餐,然后等在那直到你要的食物准备好给你。收银员不能接待下一个人,除非你拿到食物离开。想接待更多的客户,容易!加更多的收银员!

    当然,我们知道快餐店其实不是这样工作的。他们其实就是基于事件驱动方式,这样收银员更高效。只要你把点餐单给收银员,某个人已经开始准备你的食物,而同时收银员在进行收款,当你付完钱,你就站在一边而收银员已经开始接待下一个客户。在一些餐馆,甚至会给你一个号码,如果你的食物准备好了,就呼叫你的号码让你去柜台取。关键的一点是,你没有阻塞下一个客户的订餐请求。你订餐的食物做好的事件会导致某个人做某个动作(某个服务员喊你的订单号码,你听到你的号码被喊到去取食物),在编程领域,我们称这个为回调(callback function)。
    传统的web server多为基于线程模型。你启动Apache或者什么server,它开始等待接受连接。当收到一个连接,server保持连接连通直到页面或者什么事务请求完成。如果他需要花几微妙时间去读取磁盘或者访问数据库,web server就阻塞了IO操作(这也被称之为阻塞式IO).想提高这样的web server的性能就只有启动更多的server实例。
    相反的,Node.Js使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。这个模型非常高效可扩展性非常强,因为webserver一直接受请求而不等待任何读写操作。(这也被称之为非阻塞式IO或者事件驱动IO)
    考虑下面这个过程:
    1,你用浏览器访问nodejs服务器上的"/about.html"
    2,nodejs服务器接收到你的请求,调用一个函数从磁盘上读取这个文件。
    3,这段时间,nodejs webserver在服务后续的web请求。
    4,当文件读取完毕,有一个回调函数被插入到nodejs的服务队列中。
    5,nodejs webserver运行这个函数,实际上就是渲染(render)了about.html页面返回给你的浏览器。

    文章部分内容参考理解Node.js事件驱动编程,再次向作者表示感谢。

  • 相关阅读:
    function to_timestamp(timestamp without time zone, unknown) does not exist
    Xshell连接不上Ubuntu解决方式
    怎样使用MobaXterm上传文件到远程Linux系统 MobaXterm怎么使用连接远程服务器?
    notepad++怎样删除空行
    思维脑图在线制作工具网址
    @ApiImplicitParams
    .bat批出处理文件
    主题模型及其在文本情感分析中的应用
    表达式求职JAVA(转)
    2013华为校园招聘java实现(大家水个回复啊)
  • 原文地址:https://www.cnblogs.com/JessicaIsEvolving/p/9391200.html
Copyright © 2011-2022 走看看