Nodejs基础(5-6)HTTP概念进阶
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概念进阶的更多相关文章
- [转]Nodejs基础中间件Connect
Nodejs基础中间件Connect 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的J ...
- Nodejs基础中间件
Nodejs基础中间件Connect http://www.tuicool.com/articles/emeuie 关于作者 张丹(Conan), 程序员Java,R,PHP,Javascript ...
- RabbitMq基础教程之基本概念
RabbitMq基础教程之基本概念 RabbitMQ是一个消息队列,和Kafka以及阿里的ActiveMQ从属性来讲,干的都是一回事.消息队列的主要目的实现消息的生产者和消费者之间的解耦,支持多应用之 ...
- nodejs 基础篇整合
nodeJs 基础篇整合 最近有朋友也想学习nodeJs相关方面的知识,如果你是后端想接近前端,node作为一门跑在服务端的JS语言从这里入门再好不过了.如果你正好喜欢前端,想走的更高,走的更远.no ...
- Nodejs第一天-{Nodejs基础 深刻理解浏览器 环境变量 基础语法}
Nodejs第一天 1.什么是Nodejs Nodejs是一个可以运行(解析)ECMAScript的环境; ECMAScript是规定了一些列的语法 ,这些语法想要解析的执行就需要放在某个环境 ...
- (转)OpenLayers3基础教程——OL3基本概念
http://blog.csdn.net/gisshixisheng/article/details/46756275 OpenLayers3基础教程——OL3基本概念 从本节开始,我会陆陆续续的更新 ...
- 前端知识体系-NodeJS相关】NodeJS基础知识全面总结
NodeJS基础知识 1. Node的全局对象和全局变量 1.1 全局对象:所有模块都可以调用的 global:表示Node所在的全局环境,类似于浏览器的window对象. process:该对象表示 ...
- RabbitMQ 入门系列:5、基础编码:交换机的进阶介绍及编码方式。
系列目录 RabbitMQ 入门系列:1.MQ的应用场景的选择与RabbitMQ安装. RabbitMQ 入门系列:2.基础含义:链接.通道.队列.交换机. RabbitMQ 入门系列:3.基础含义: ...
- RabbitMQ 基础概念进阶
上一篇 RabbitMQ 入门之基础概念 介绍了 RabbitMQ 的一些基础概念,本文再来介绍其中的一些细节和其它的进阶的概念. 一.消息生产者发送的消息不可达时如何处理 RabbitMQ 提供了消 ...
随机推荐
- -----------MSSQL生成流水号-----------------------
--下面的代码生成长度为8的编号,编号以BH开头,其余6位为流水号.--得到新编号的函数CREATE FUNCTION f_NextBH()RETURNS char(8)ASBEGIN RETURN( ...
- ELK(Elasticsearch6.0以上版本head插件安装)
参考:https://www.cnblogs.com/Onlywjy/p/Elasticsearch.html Elasticsearch6.0不能使用命令直接安装head插件 修改配置文件/etc/ ...
- php后台对接ios,安卓,API接口设计和实践完全攻略,涨薪必备技能
2016年12月29日13:45:27 关于接口设计要说的东西很多,可能写一个系列都可以,vsd图都得画很多张,但是由于个人时间和精力有限,所有有些东西后面再补充 说道接口设计第一反应就是r ...
- [No0000100]正则表达式匹配解析过程分析(正则表达式匹配原理)&regexbuddy使用&正则优化
常见正则表达式引擎引擎决定了正则表达式匹配方法及内部搜索过程,了解它至关重要的.目前主要流行引擎有:DFA,NFA两种引擎. 引擎 区别点 DFA Deterministic finite autom ...
- CM5.x配置spark错误解决
通过cloudera manager 5.x添加spark服务,在创建服务过程中,发现spark服务创建失败,可以通过控制台错误输出看到如下日志信息: + perl -pi -e 's#{{CMF_C ...
- python各种模块,迭代器,生成器
从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能) 本质就是.py结尾的python文件(文件名:test.py,对应的模块名就是test) 包:用来从逻辑上组织模块的,本质就是一个目 ...
- 《linux 计划任务》- cron
一:什么是计划任务 - 你给手机定了一个闹钟,每天的 7:00 会准时响铃叫你起床,这实际上就是一个计划任务 - 所谓定时任务,就是在已经定好的特定时间去执行的事情. - Cron是一个[守护程序]用 ...
- 那些年读过的书《Java并发编程实战》一、构建线程安全类和并发应用程序的基础
1.线程安全的本质和线程安全的定义 (1)线程安全的本质 并发环境中,当多个线程同时操作对象状态时,如果没有统一的状态访问同步或者协同机制,不同的线程调度方式和不同的线程执行次序就会产生不同的不正确的 ...
- EXPLAIN执行计划中要重点关注哪些要素(叶金荣)
原文:http://mp.weixin.qq.com/s/CDKN_nPcIjzA_U5-xwAE5w 导读 EXPLAIN的结果中,有哪些关键信息值得注意呢? MySQL的EXPLAIN当然和ORA ...
- python练习题-day2
1.判断下列逻辑语句的True,False 1)1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 True ...