1、什么是回调? 是异步编程最基本的方法,对于nodejs来说需要按顺序执行异步逻辑的时候一般采用后续传递的方式,也就是将后续逻辑封装在回调函数中作为起始函数的参数逐层去嵌套。通过这种方式来让程序按照我们期望的方式走完整个流程。

2、什么是同步/异步?同步就是执行一个任务,后一个任务等待前一个任务执行完再执行。程序的执行顺序和任务的排列顺序是一致的。浏览器中的js是单线程的,是按顺序执行的,虽然js文件可以并行下载,但是必须按顺序执行。如果js中有死循环,那么页面就会阻止在这里,后面的js也不会执行。

js中的异步函数:setTimeOut setInterval

 var c = 

 function printIt () {
console.log(c)
}
function plus (callback) {
setTimeout(function () {
c+=
callback()
},)
} plus(printIt)

3、什么是I/O?磁盘的写入和读出,数据的进和出。在nodejs中本质上是为数据库和文件系统这些资源提供接口,向文件系统发送一个请求的时候不用等待硬盘,硬盘准备好的时候非阻塞接口会通知到node。

4、什么是单线程/多线程? 单线程:程序是按顺序执行的。一次只能谈一个女朋友,分手后再谈下一个。如果一个女朋友纠缠你,就会导致阻塞。

多线程:有管理和分配资源的难度。可以同时脚踏几只船,但是要分配好资源。否则争抢资源,自己也会崩溃。

5、什么是阻塞/非阻塞?阻塞:如打电话预约,如果对方不回信,自己这里就一直是挂起状态。非阻塞:等不到回信,自己就先去玩,可以隔段时间打电话询问。

6、什么是事件?鼠标点击,拖拽窗口等。

7、什么是事件驱动?所有触发的事件都是EventEmitter的实例。为某个事件注册了回调函数,这个回调函数不是马上执行,只有当这个事件发生的时候才会调用回调函数,这种函数执行的方式就叫事件驱动。这种回调就叫基于事件驱动的回调。如果这些回调和异步的IO操作有关,这个就可以看作是基于回调的异步IO,这种回调在nodejs中是有事件来驱动的。

8、什么是基于事件驱动的回调?

9、什么是事件循环Eventloop?倘若有大量的异步操作,以及IO的耗时操作甚至是定时器控制的延时操作,他们完成的时候都会调用相应的回调函数,从而来完成一些密集的任务而又不会阻塞整个程序执行的流程,这时这么多事件就需要有一个机制来管理,这种机制就是事件循环。

Eventloop:是一个回调函数队列。当异步函数执行的时候,回调函数就会被压入到这个队列,对于nodejs来说靠一个单线程不断的查询队列中是否有事件,当他读取到一个事件的时候将调用与这个事件关联的js函数。事件的循环是先进先出的任务队列。回调就按照他们被加入队列的顺序来执行。整个队列可以理解成普通的函数和回调函数构成的完整的队列。

Nodejs的核心思想:单线程非阻塞和事件驱动

事件循环 :----“任务队列”是一个事件的队列(也可以理解成消息 的队列),IO设备完成一项任务(除了IO设备的事件 以外,还包括一些用户产生的事件,比如鼠标点击、 页面滚劢等等)、就在"任务队列"中添加一个事件,表 示相关的异步任务可以迚入"执行栈"了。主线程读取" 任务队列",就是读取里面有哪些事件。

只要主线程的执行栈为空时,主线程就会去读取"任务 队列" ,依次执行那些带有事件任务所对应的回调函数。 这个过程是循环丌断的,所以这种运劢机制又称为 Event Loop(事件循环)。

主线程运行的时候,产生堆和 栈,栈中的代码调用各种外部 API,它们在"任务队列"中加 入各种事件。只要栈中的代码 执行完毕,主线程就会去读取 "任务队列",依次执行那些事 件所对应的回调函数。

定时器 --------"任务队列"中除了放置异步任务的事件,还可以放 置定时事件,即指定某些代码在多少时间之后执行。 这叫做"定时器"(timer)功能,也就是定时执行 的代码。

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

Nodejs基础(5-6)HTTP概念进阶的更多相关文章

  1. [转]Nodejs基础中间件Connect

    Nodejs基础中间件Connect 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的J ...

  2. Nodejs基础中间件

    Nodejs基础中间件Connect   http://www.tuicool.com/articles/emeuie 关于作者 张丹(Conan), 程序员Java,R,PHP,Javascript ...

  3. RabbitMq基础教程之基本概念

    RabbitMq基础教程之基本概念 RabbitMQ是一个消息队列,和Kafka以及阿里的ActiveMQ从属性来讲,干的都是一回事.消息队列的主要目的实现消息的生产者和消费者之间的解耦,支持多应用之 ...

  4. nodejs 基础篇整合

    nodeJs 基础篇整合 最近有朋友也想学习nodeJs相关方面的知识,如果你是后端想接近前端,node作为一门跑在服务端的JS语言从这里入门再好不过了.如果你正好喜欢前端,想走的更高,走的更远.no ...

  5. Nodejs第一天-{Nodejs基础 深刻理解浏览器 环境变量 基础语法}

    Nodejs第一天 1.什么是Nodejs ​ Nodejs是一个可以运行(解析)ECMAScript的环境; ​ ECMAScript是规定了一些列的语法 ,这些语法想要解析的执行就需要放在某个环境 ...

  6. (转)OpenLayers3基础教程——OL3基本概念

    http://blog.csdn.net/gisshixisheng/article/details/46756275 OpenLayers3基础教程——OL3基本概念 从本节开始,我会陆陆续续的更新 ...

  7. 前端知识体系-NodeJS相关】NodeJS基础知识全面总结

    NodeJS基础知识 1. Node的全局对象和全局变量 1.1 全局对象:所有模块都可以调用的 global:表示Node所在的全局环境,类似于浏览器的window对象. process:该对象表示 ...

  8. RabbitMQ 入门系列:5、基础编码:交换机的进阶介绍及编码方式。

    系列目录 RabbitMQ 入门系列:1.MQ的应用场景的选择与RabbitMQ安装. RabbitMQ 入门系列:2.基础含义:链接.通道.队列.交换机. RabbitMQ 入门系列:3.基础含义: ...

  9. RabbitMQ 基础概念进阶

    上一篇 RabbitMQ 入门之基础概念 介绍了 RabbitMQ 的一些基础概念,本文再来介绍其中的一些细节和其它的进阶的概念. 一.消息生产者发送的消息不可达时如何处理 RabbitMQ 提供了消 ...

随机推荐

  1. Django----djagorestframwork使用

    restful(表者征状态转移,面向资源编程)------------------------------------------->约定 从资源的角度审视整个网络,将分布在网络中某个节点的资源 ...

  2. day6 六、元组、字典、集合的基本操作和内置方法

    一.元组 1.定义 # 元组tuple # 记录多个值,当值没有改的需求是,建议用元组更好 # 定义:在()内用逗号分开任意类型的值 # name = (, , 300.5]) # print(nam ...

  3. .NET Core开发日志——Action

    在叙述Controller一文中,有一处未做解释,即CreateControllerFactory方法中ControllerActionDescriptor参数是如何产生的.这是因为其与Action的 ...

  4. XDOJ 1046 - 高精度模板综合测试 - [高精度模板]

    题目链接:http://acm.xidian.edu.cn/problem.php?id=1046 题目描述 请输出两个数的和,差,积,商,取余.注意不要有前导零. 输入 多组数据,每组数据是两个整数 ...

  5. iOS 线程安全

    线程安全: 当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题.就好比几个人在同一时修改同一个表格,造成数据的错乱. 解决多线程安全问题的方法 方法一:互斥锁(同步锁) @synchroni ...

  6. Chrome浏览器如何调试移动端网页信息

    Chrome浏览器如何调试移动端网页信息 2017年08月12日 12:42:20 阅读数:835 最近在弄项目,用WebView加载一个页面,想追踪页面中一个按钮的点击事件.这个可能就需要调试这个页 ...

  7. Quick access recorder

    QAR_百度百科 https://baike.baidu.com/item/QAR/3300914

  8. ADO多线程数据库总结

    ADO多线程数据库查询通常会出现以下问题: 1.CoInitialize 没有调用(CoInitialize was not called):所以,在使用任何dbGo对象前,必须手 调用CoIniti ...

  9. java kafka 生产者消费者demo

    一.修改kafka   server.porperties的ip是你本机的ip listeners=PLAINTEXT://192.168.111.130:9092 二.生产者的例子 import o ...

  10. 在Java程序中读写windows共享文件夹

    摘要 使用Java通过JCIFS框架读写共享文件夹,使用SMB协议,并支持域认证. 项目常常需要有访问共享文件夹的需求,例如读取共享文件夹存储的视频.照片和PPT等文件.那么如何使用Java读写Win ...