前言

从小工到专家系列为从头开始学习Nodejs,但它并不是教程,我会整理一些应该特别注意或深入理解的知识点,当然也会涉及常用的库,比如Express,mongoose,bluebird..

Nodejs特点:

单线程

优点:

  • 没有死锁存在

  • 没有线程上下文交换所产生的性能开销

缺点:

  • 无法利用多核

  • 错误会引起整个应用退出,健壮性不高

  • 大量计算占用CPU导致无法继续调用异步I/O

解决方案:

  • 引入child_process,大量计算时可以将计算分发到子进程,缓解压力

  • 进程之间通过事件消息传递结果

跨平台

兼容Windows和*nix.在操作系统与Node上层模块之间构建一层平台层架构,即libuv

效率高

  • V8引擎

V8是谷歌开发的,目前公认最快的 Javascript 解析引擎,libuv 是一个开源的、为 Node 定制而生的跨平台的异步 IO 库。

高性能

采用事件循环,而不是为每个连接分配一个线程

应用场景

  • 对实时和并发有很高要求的,比如游戏,聊天等等

非阻塞I/O

操作系统内核对于I/O只有两种方式:阻塞与非阻塞.在调用阻塞IO时,应用程序需要等待I/O完成才能返回结果.

阻塞I/O造成CPU等待I/O,浪费等待时间,CPU的处理能力不能得到充分利用.为了提高性能,内核提供了非阻塞I/O.非阻塞I/O会在调用后立即返回.

上面的立即如何理解呢?

因为阻塞I/O完成了整个获取数据的过程,而非阻塞I/O则不带数据直接返回,要获取数据,还需要通过文件描述符再次读取.

  • 文件描述符类似于应用程序与系统内核之间的凭证.如果应用程序需要进行I/O调用,需要先打开文件描述符,然后在根据文件描述符去实现数据的读写

但非阻塞I/O存在些问题,它立即返回的并不是业务层期望的数据,而仅仅是当前调用的状态.为了获取完整的数据,应用程序需要重复调用I/O操作来确认是否完成.这种重复调用判断操作是否完成的技术叫做轮询

异步I/O

事件循环

在进程启动时,Node会创建一个类似与while(true)的循环,它的作用就是产看是否有事件待处理,如果有就取出并处理,直到没有就退出进程.

观察者

如何知道是否有事件待处理呢,就引入了观察者.再Node中观察者包括文件I/O观察者和网络观察者等.相当于一个探哨的.

请求对象

当我们要从自己写的js到系统进行调用,会经历一个过程js->Node核心模块->C++内建模块->libuv->系统,那么传递参数信息就会利用一个请求对象,包括回调函数也在里面.

请求对象是非常重要的中间产物,所有的状态都保存再这个对象中,包括送入线程池等待执行及I/O操作完毕后的回调处理.

执行回调

组装好请求对象,送入I/O线程池等待执行,实际上完成了异步I/O的第一部分,回调通知是第二部分.I/O观察者回调函数的行为就是取出处理后返回的结果,以此达到调用JavaScript中传入的回调函数的目的.

Nodejs从小工到专家系列(一)相关推荐

  1. Java程序员职场全功略 从小工到专家 连载三 IT语言平台

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! IT语言 ...

  2. 程序员修炼之道:从小工到专家阅读笔记01

    个人感受部分: 01.总是想要塑造一种自己全能的形象,害怕承认自己的无知和错误. 02.好的程序员对他或自己的职业生涯负责,并且不害怕承认无知和错误,直视我们的缺点--我们必须诚实.责任是我们要主动承 ...

  3. 《Java程序员职场全攻略:从小工到专家》连载十二:大家都是个什么身价

    大家都是个什么身价 根治这种症状的第一步,就是让其彻底看清大家到底都是什么样的身价.不过这服药可不好熬出来,薪水这个问题,从哪个角度讲可能都不一样.横向可以分为不同学历.不同技术.不同公司.不同职位. ...

  4. Java专家系列:CPU Cache与高性能编程

    认识CPU Cache CPU Cache概述 随着CPU的频率不断提升,而内存的访问速度却没有质的突破,为了弥补访问内存的速度慢,充分发挥CPU的计算资源,提高CPU整体吞吐量,在CPU与内存之间引 ...

  5. [译]GC专家系列5-Java应用性能优化的原则

    原文链接:http://www.cubrid.org/blog/dev-platform/the-principles-of-java-application-performance-tuning/ ...

  6. [译]GC专家系列4-Apache的MaxClients设置及其对Tomcat Full GC的影响

    2 原文链接:http://www.cubrid.org/blog/dev-platform/maxclients-in-apache-and-its-effect-on-tomcat-during- ...

  7. [译]GC专家系列3-GC调优

    原文链接:http://www.cubrid.org/blog/dev-platform/how-to-tune-java-garbage-collection/ 本篇是GC专家系列的第三篇.在第一篇 ...

  8. [译]GC专家系列2:Java 垃圾回收的监控

    原文链接:http://www.cubrid.org/blog/dev-platform/how-to-monitor-java-garbage-collection/ 这是GC专家系列文章的第二篇. ...

  9. [译]GC专家系列1:理解Java垃圾回收

    原文链接:http://www.cubrid.org/blog/de... 了解Java的垃圾回收(GC)原理能给我们带来什么好处?对于软件工程师来说,满足技术好奇心可算是一个,但重要的是理解GC能帮 ...

最新文章

  1. 最近要换个主机,现在的太慢了
  2. visio网络拓扑图模具_【无机纳米材料科研制图——Visio 0304】上转换NaYF4:Yb Er/Tm光子能级跃迁图...
  3. byte java byte_详解java中的byte类型
  4. 【渝粤教育】21秋期末考试服务标准化10011k1
  5. 中国大学MOOC-数据结构基础习题集、06-2、旅游规划
  6. 抽象类细分举行_什么是用聚类技术聚类的客户细分
  7. 基于PCA和SVM的人脸识别
  8. 分号与逗号的区别及举例_如何掌握分号的用法 和顿号有什么区别
  9. Infragistics netadvantage UltraGrid (UltraWinGrid) 编程手记
  10. js打开新窗口与页面跳转
  11. 任务1:WS2812B彩灯控制和按键控制(arduino程序)
  12. 制作浏览器javascript书签
  13. python hist2d_matplotlib可视化之hist直方图
  14. CIR 工业自动化雷达
  15. 机电工程专业成功转行IT的真实经历
  16. CSR8670学习笔记:OTA升级固件
  17. WORD插入摄氏华氏度及换算
  18. 数据库的修改表字段语句
  19. 对这个java虚拟机内存的,年轻代,年老代,永久代i,搞不太清楚。年轻代、年老代存放在堆还是栈。新版虚拟机没有永久代是个啥情况
  20. 53 张图详解防火墙的 55 个知识点

热门文章

  1. DateFormat(炸窝)
  2. C++:41---覆盖和隐藏
  3. Servlet 工程 web.xml 中的 servlet 和 servlet-mapping 标签
  4. 《Python Cookbook 3rd》笔记(5.2):打印输出至文件中
  5. mysql书写规则_每天10分钟带你学会MySQL(二)SQL语句的基本书写规则
  6. 东芝移动硬盘驱动_传输数据不用等,高速移动硬盘数据线畅享快传体验
  7. C语言深度剖析书籍学习记录 第七章 文件结构
  8. C++ primer第六章6.6函数匹配
  9. 内存不足:杀死进程还是牺牲子进程
  10. 马上有钱:揭密25种成为有钱人的方法(图)