nodejs调用C++扩展模块培训

nodejs相关知识介绍

  1、V8是什么?为什么要用V8?V8实现了什么功能?

        编程语言分为编译型语言和解释型语言两类,编译型语言在执行之前要先进行完全编译,而解释型语言一边编译一边执行,很明显解释型语言的执行速度是慢于编译型语言。

        随着Web相关技术的发展,JavaScript所要承担的工作也越来越多,这就更需要快速的解析和执行JavaScript脚本。限于JavaScript语言本身的不足,执行效率不高,Google就开始了V8引擎的研究,将一系列新技术引入JavaScript引擎中,V8引擎是一种JavaScript引擎实现,大大提高了JavaScript的执行效率。在node中也是采用该引擎来解析JavaScript。

        V8引擎在执行JavaScript的过程中,主要有两个阶段:编译和运行。与编译型语言执行前完全编译不同的是,JavaScript需要在用户使用时完成编译和执行。在V8中,JavaScript相关代码并非一下完成编译的,而是在某些代码需要执行时,才会进行编译,这就提高了响应时间,减少了时间开销。

V8只是一个JS引擎。它必须要实现JS引擎的几个基础功能

 1)脚本执行:

      脚本可能是一个表达式;一段js代码;或者一个文件,执行相应的脚本并返回相应的值。

 2)可以让C++来获取JS的内容

      获取JS内容的数据(包括基础数据类型、数组、日期等)、对象(类的一个实例)、类或函数。

 3)可以让JS来获取C++的内容

       获取C++的内容(包括基础数据类型、数组、日期等)、对象(类的实例)、 类或函数。

  2、Libuv介绍

Libuv 是开发node的过程中需要一个跨平台的事件库,底层在linux下用libev实现,Windows下用IOCP实现。

  3、Nodejs处理前端事件的流程

1) 从JavaStricp调用Node的核心模块,核心模块调用NodeJs API,NodeJs API通过libuv进行系统调用。

2) 从JavaStricp调用Node的核心模块,核心模块调用C++内建模块,内建模块通过libuv进行系统调用。

 

Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。下图展示了其工作流程:

 

 

上图主线程的绿色部分,还是表示运行时间,而橙色部分表示空闲时间。每当遇到I/O的时候,主线程就让Event Loop线程去通知相应的I/O程序,然后接着往后运行,等到I/O程序完成操作,Event Loop线程再把结果返回主线程。主线程就调用事先设定的回调函数,完成整个任务。

Nodejs的事件循环

    在node进程启动的时候,Node便会创建一 个类似于while(true)的循环,每执行一次循环体的 过程称为Tick,每个Tick的过程就是查看是否有 事件待处理,如果有就取出事件及其相关的回调 函数,执行它们,然后进入下一个循环。

 

Nodejs调用自身api处理前端的事件:

 

 

Nodejs调用C++模块处理前端的事件

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_35886593/article/details/89396833
今日推荐