zoukankan      html  css  js  c++  java
  • Node.js 特点与快速入门

    如果你面试的公司要求你熟练操作node,那么一定会问你关于对node的理解,接下来我将迈着轻快的步伐带你深入剖析node,快速入门

    在你之前的印象中,js是不是只能做前台的东西,学了node之后你会发现js也能搞后端

    话不多说,先来看一张图

      

    熟悉吧,你作为客户端像向服务器请求页面,如果你这个页面不需要申请数据库的数据,OK我服务器直接响应你,如果你需要数据,我服务器就应该向数据库申请数据了,此时我服务器请求与响应的时间肯定是特别快的,重点是我们要去优化这个I/O请求的时间。对此,我们node出现了。

    首先我们要看一下node官网对node的释义:

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

      Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。

      Node.js 的包管理器 npm,是全球最大的开源库生态系统。

    看这篇文章的人说明你对前端肯定有所了解,那Chrome V8 引擎我就不过多解释了

    node的三大特点:一  单线程    二  非阻塞I/O    三  事件驱动

    先来说一下单线程

      通俗的来说,就像是一个饭店,一个老板他请了好多服务员,每次来一个客人我就分配一个服务员,node就像一个抠门的餐厅老板,他就请了一个服务员,每次来一个客人,他先让人家看看菜单,再去服务其他客人,等客人选好菜了他再重新去处理这位客人。

      在Java,PHP和.net等服务器端语言中,会为每一个客户端连接创建一个新的线程,每个线程需要耗费大约2MB内存,也就是说,一个8G的服务器最多能连接4000个用户。在Node中,仅仅使用一个线程,当有用户连接时就触发一个了内部事件,通过非阻塞I/O和事件驱动,让node宏观上并行。理论上说一个8GB服务器,可以同时处理超过40000用户连接。

    非阻塞I/O

      异步是什么意思?   

      比如说你需要做家务,洗衣服,扫地,以及烧开水等等一系列的事情。如果你一件事一件事的挨个做完了之后,才能接着做下一件事,你做一件事,你必须要等待,等待做完了之后,再做另外一件事。这叫同步。那么这个时候,如果我们懂得合理安排时间的话,我们可以这样办:我们在烧开水的时候,我们可以扫地,因为烧开水不用我们守着嘛!只需要把水放好,或点燃就行了。然后,我们可以去做其他事情了。比如说,扫地,或者是洗衣服,等等一系列的事情我们都可以做。那么这样,在做完了同样的事情,但是我们所需要花费的时间,它是不一样的。你用后面这种方式,可能用的时间会更短,效率更高。而你用前面那种同步的方式,它的效率会更低。那么,后面这种事情,我们就把它叫做异步的操作。   

      事件与回调   

      如果你采用异步的方式来做事情,它的效率会很高,但是你同时只能做一个事情。比如说,你烧开水的时候,虽然说不用你守在那里。但是你扫地了过后,你这个水烧开的时候,我怎么知道呢?(就是这件事做好了之后,我怎么知道呢?) 于是我们可以想一下,在这个水壶上面,给它放一个小喇叭,当这个水烧开了之后会冒蒸汽,当这个蒸汽吹响这个喇叭的时候,我们就知道这个事情做好了,水烧开了触发了小喇叭,就是触发了一个事件,我们去处理烧开的热水就是回调 。

    事件驱动  

      举一个通俗点的例子,你在餐厅吃饭,如果当时店内生意比较好,你坐下来,服务员过来招待你,这时,另一桌也刚坐下并呼叫服务员。正常情况下,服务员肯定会想给你个菜单让你自己看看,看好了再叫他,接着去招呼那一桌的客人了,完了再给你端茶什么的 这就是事件驱动。

      通过监听事件的状态变化来做出相应的操作。当你发出一个请求的时候,如果这个请求需要等待,那这个请求便会被放入“队列”中,在处理这个请求的同时,后续的无需请求也在被处理,事件处理结束后,调用请求的回调函数。注:在处理无需等待的事件时,事件循环是暂停的。

    说到现在你肯定对node特点有一个大致的了解

      再来看张图

     

      首先,我们所有需要处理的事件会先放入事件栈中,然后通过事件循环机制去处理这些事件,如果只是简单的操作(就是不包含磁盘I/O,网络通信等这些耗时长的操作的事件)我们直接通过回调函数去把这些事件完成,如果包含之前那些操作的就再次将他们放入事件栈等待循环

    看到这里,你会不会觉得node这么刁,你可千万别不怕死的跟人家说,我们node性能这么高,别学什么PHP,java了,那玩意不行。你也要想要一个问题哈,虽然node效率高,但它是单线程,所谓它最优秀地方必然带着致命伤,如果这个线程崩了,啊哈哈哈,对不起,你就玩完了。当然也没有那么容易就崩了,健壮性还是很强的。

      嗯哼,相信你现在对node已经有一个大概的了解了,那么,我们开始实战吧,啊哈哈哈

      实战请看下一篇

  • 相关阅读:
    git的版本回退
    elementui的表格有多选框时翻页记住之前选择的数据
    git操作总结
    POJ 3107 Godfather
    HDU 4405 Aeroplane chess
    ZOJ 3626 Treasure Hunt I
    UVA 10537 Toll! Revisited
    POJ 3093 Margaritas on the River Walk
    POJ 1655 Balancing Act
    POJ 2342 Anniversary party
  • 原文地址:https://www.cnblogs.com/gongyijie/p/9425408.html
Copyright © 2011-2022 走看看