1.什么是NodeJs?
NodeJs不是一门编程语言,是一个javascript的运行环境,NodeJs是采用C++语言编写而成的一个javascript的解释器。
2.什么是运行环境?
通俗讲指一种语言想要实现相关的功能需要另外一种事物(可以是语言也可以是其他的东西)作为它的载体或者运行平台。
- 在客户端,javascript想要实现某种功能是需要浏览器提供支持,如果没有浏览器提供支持是完成不了的。
- 操作系统的运行环境,就是电脑硬件本身,如果连电脑都没有,那么操作系统无法运行。
3.为什么NodeJs是javascript的运行环境?
因为NodeJs采用的是Google Chrome浏览器的V8引擎,而V8引擎就是javascript的运行环境。
4.服务器语言有什么特点?
4.1 进行http通信、接受http请求、响应http请求;
4.2 操作数据库,对数据库里面的内容进行增删改查;
4.3 可以操作本地文件,对本地文件进行读写,创建和删除等。
5.NodeJs 有什么特点?
5.1 进行http通信、接受http请求、响应http请求;
5.2 操作数据库,对数据库里面的内容进行增删改查;
5.3 可以操作本地文件,对本地文件进行读写,创建和删除等;
5.4 是javascript的运行环境;
5.5 事件驱动;
5.6 非阻塞I/O;
5.7 单线程。
6.什么是事件驱动?
事件:在客户端js中有 点击按钮事件/鼠标事件/键盘事件等都叫事件。
事件驱动:有鼠标或者键盘引起一连串的操作动作叫做事件驱动。
简单理解:通常事件驱动会伴随着相对应的程序处理或者函数的执行。
7.什么是非阻塞I/O?
I/O:input/outiput 输入输出
通俗来讲:
对于磁盘I/O = 读写
对于网络I/O = 收发请求
阻塞I/O:
指在执行I/O的过程中,会阻塞其他应永程序的进行,只有等待这个I/O完成后,才会进行其他的操作。
非阻塞I/O:
指在执行I/O的过程中,不会等待其他应用程序执行完成后再执行其他应用程序,当I/O结束后,再回头处理这个结果,即异步。
8.单线程
单线程:程序按照逻辑顺序执行,前面的必须处理完成,后面的才会执行,即在同一个时间里面只能做一件事情。
如:你在点击按钮出现弹窗的时候,就不可以对浏览器做出其他的相应操作。
多线程:程序在一个时间里面可以做多个事情 能够提高效率
如:迅雷同时下载多部电影
问: javascript 是一门单线程语言,为什么javascript不能是多线程?
答:javascript作为单线程,由其内容所决定,在浏览器环境中,JavaScript的主要用操作DOM。如果JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这个时候无法进行。
9. 问题来了,既然javascript是单线程,那么为什么nodejs会有非阻塞I/O?
I/O操作都是比较耗时的,这个会阻塞其他的任务进行,javascript的设计者认为,没有必要等待I/O的完成,在I/O任务完成之前javascript完全可以继续执行其他的任务,直到I/O任务完成后再回头执行该任务的返回就行。
所以javascript在设计之初中将这些耗时的I/O等操作封装为了异步的方法,等到这些任务完成后就将后续的处理操作封装为JavaScript任务放入执行任务队列中,等待JavaScript线程空闲的时候被执行。
网友评论