node JS 是什么?
前端后端
网络之前 网络之后
浏览器: HTML,CSS,JS
安卓:Java,Python,c++,c#
IOS:C++,Object-c;
服务端:linux;
Java,C++,Python,C++,c#,NodeJS,PHP
计算机语言: HTML(标记语言)
编程语言:1.机器语言(机器码,原生码)低级语言
2.汇编语言 低级语言
3.高级语言:if else var float int 可读性更强
Javas比C高级,NodeJS比Java高级
Java和JS有自动回收机制
NodeJS有线程池
不需要关注更底层的操作
JS预编译的五步
1.var 形参 undefined,统一,function,执行
1.词法分析(分词 tokenizing),语法分析(parsing),语义分析(代码生成)编译的过程;
词法分析(分词 tokenizing)
1.识别关键字;var function
2.标识符:var a = 1; function test(){};
3.分解符:划分界限的专作用 () {} (function t(a,b){})
4.运算符: + - * / ^(按位 异或运算) || && |(按位或) &(按位与)
语法分析:树,数组,栈,堆
语法抽象树(Abstract Syntax Tree)(非线性结构)
语义分析(parsing)(AST) -> (目标平台–操作系统windows)可执行的二进制码(机器码)
前端的对象–浏览器
readFile();
NodeJS和JS不是一种语言。
后端的对象–不限于浏览器
linux-- centos(命令行) ubuntu(有可视化界面的) API
I/O input/output 硬盘中的输入输出
关系型数据库(mySQL(全部存储在磁盘中)),非关系型数据库(mongoDB(一部分存储在磁盘中,一部分存储在内存中),redis(全部存储在内存中))
I/O操作 非常费时 内存ns(纳秒) 10E-9s GB/s 30亿
ram 硬盘 ms(毫秒) 10E-3s 100w倍 MB/s
readFile();
console.log(1);
console.log(2);
阻塞I/O:I/O等待I/O完成才进行下一步操作;
非阻塞I/O:I/O不等待I/O完成就进行下一步操作;
异步非阻塞I/O模型;
I/O密集和CPU密集;
2009.3 Ryan dahl C++
NodeJS Web.js Node
不是单线程,多线程有一个主线程
前端JS是单线程的
单线程:1.多核CPU的性能浪费;child_process;2.阻塞代码的运行;
Libuvb
fn = fn(n-1)+fn(n-2)