NodeJS底层原理

  • Nodejs是一个平台,构建在chrome的V8上(js语言解释器),采用事件驱动、非阻塞模型( c++库:libuv).
    参考官方: Node.js is a platform built on Chrome’s JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.

  • 为什么单线程却能够支持高并发?
    (1)前提:I/O密集型任务
    (2)单线程的解释:主线程一个,底层工作线程多个。
    (3)事件机制的底层依赖库:libuv、libeio、libev

    • libuv:开发node过程中需要跨平台,首选为Linux使用libev(底层 为epoll),备选Windows使用IOCP实现,用于抽象libev和IOCP的高性能网络库。
    • 非阻塞TCP、非阻塞命名管道、UDP、异步DNS
      异步文件系统、路径查找、ANSI转义、文件系统事件
    • 子进程生成、线程池调度、进程间IPC与套接字共享
      高分辨率时间、定时器
    • epoll和IOCP的区别:
      epoll用于Linux系统,IOCP用于Windows系统;
      epoll是同步非阻塞模型:当事件资源满足时发出可处理通知消息(主线程需要自己去处理);IOCP是异步非阻塞模型,当事件完成时发出通知消息(工作线程帮主线程处理完了)

    (4)nodejs运行机制:
    图解
    a、V8引擎解析JavaScript脚本
    b、解析后的代码,调用Node API
    c、libuv库负责Node API的执行。它将不同的任务分配给不同的线程,形成一个Event Loop(事件循环),以异步的方式将任务的执行结果返回给V8引擎
    d、V8引擎再将结果返回给用户

  • 单线程的好处:
    (1)多线程占用内存高
    (2)多线程间切换使得CPU开销大
    (3)多线程由内存同步开销
    (4)编写单线程程序简单
    (5)线程安全

  • 单线程的劣势:
    (1)CPU密集型任务占用CPU时间长
    (2)无法利用CPU的多核
    (3)单线程抛出异常使得程序停止

参考:
https://www.oschina.net/p/libuv
https://blog.csdn.net/lijinqi1987/article/details/71214974
https://blog.csdn.net/sparkliang/article/details/4836536
https://blog.csdn.net/leftfist/article/details/41891407
http://www.cnblogs.com/shuidao/p/3262780.html

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值