Node.js简介

2018-12-8 小若 Node.js学习录

Node.js是一个让JavaScript运行在服务器端的开发平台


  Node.js是一个让JavaScript运行在服务器端的开发平台


  Node之后, js代码可以和操作系统(Mac OS,  windows, Linux...)交互,  战场从浏览器延伸到了服务器

  Node之前, js代码只能运行在客户端, 最多只能在浏览器内翻江倒海(简单的说,没有node.js之前,js只能在浏览器里边运行,有了node.js之后,让js可以在各种平台运行)


一开始叫Web.js, 目的就是用于写高性能Web服务器的

越写越大, 形成生态(服务器开发,  各种框架的依赖...), 改名为Node.js

Node: 节点, Node的开源团队希望它像节点一样可以不断扩展, 壮大



本变化

 )C/AU{6H4P9[){~WOHKQV.png


Node 奇数是开发版, 偶数是稳定版

Joyent收购Node, 把它变成公司旗下的一产品, 但程序员都有一颗开源的心(共产主义, 希望Node不属于某个人,某个公司), 退出, 搞了个io.js ,  分久必合合久必分

原来是0.几, 突然来了个4.0, 不要感觉奇怪



node.js !功能类似的其他后端语言    例如PHP、JSP、Python、Ruby, 都可以和系统进行交互


和其他的后端语言的区别:

Node.js不是一种独立的语言    

PHP, JSP,.... 既是语言, 也是平台

Node.js用JavaScript进行编程, 运行平台是包装后的js引擎(V8)


轻量级架构

  • java,php,.net都需要运行在服务器上,apache,tomat,naginx,IIS
  • Node.js不用架设在任何服务器软件之上
  • 用最小的硬件成本, 达到更高的并发, 更优的处理性能


node.js 的特点:

单线程    

    好处:

        减少了内存开销(操作系统完全不再有线程创建、销毁的时间开销)

  1. 在Java、PHP或者.net等服务器端语言中,会为每一个客户端连接创建一个新的线程。而每个线程需要耗费大约2MB内存,相当于有一个人就要分配一个线程,就要占用空间大小
  2. 当有用户连接了,就触发一个内部事件,通过非阻塞I/O、事件驱动机制,让Node.js程序宏观上也是并行的。使用Node.js,一个8GB内存的服务器,可以同时处理超过4万用户的连接。(张三和李四, 张三先启动服务器,张三正在做某件事, 李四的请求来了,先把张三的语法终止,把李四的请求放到一个事件栈当中,放过之后,继续做张三的事)
  3. Node.js不为每个客户连接创建一个新的线程,而仅仅使用一个线程。

    劣势:

    如果某一个事情,进入了,但是被I/O阻塞了,整个线程就阻塞了    如果一个人把Node.js搞崩溃,全部崩溃(但很难搞崩溃


非阻塞I/O

概念:

当在访问数据库取得数据的时候,需要一段时间。在传统的单线程处理机制中,在执行了访问数据库代码之后,整个线程都将暂停下来,等待数据库返回结果,才能执行后面的代码。也就是说,I/O阻塞了代码的执行,极大地降低了程序的执行效率。

不会傻等I/O语句结束,而会执行后面的语句。

  • Node.js中采用了非阻塞型I/O机制,因此在执行了访问数据库的代码之后,将立即转而执行其后面的代码,把数据库返回结果的处理代码放在回调函数中,从而提高了程序的执行效率。
  • 当某个I/O执行完毕时,将以事件的形式通知执行I/O操作的线程,线程执行这个事件的回调函数。为了处理异步I/O,线程必须有事件循环,不断的检查有没有未处理的事件,依次予以处理。
  • 阻塞模式下,一个线程只能处理一项任务,要想提高吞吐量必须通过多线程。而非阻塞模式下,一个线程永远在执行计算操作,这个线程的CPU核心利用率永远是100%。

所以,这是一种特别有哲理的解决方案:雇佣一群人不干活,不如花大价钱雇一个拼命干活.


非阻塞能解决问题么?

比如执行着小红的业务,执行过程中,小刚的I/O回调完成了,此时怎么办??所以要有事件驱动循环



概念:

不管是新用户的请求,还是老用户的I/O完成,都将以事件方式加入事件环,等待调度

A)QT@AL]WHH$MUO5$8C0I{R.png


Node.js当中所有的I/O都是异步的, 都是回调函数套回调函数

标签: Node.js

发表评论:

Powered by emlog 备案号:豫ICP备18002778号