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 提供了消 ...
随机推荐
- CodeForces - 754D
All our characters have hobbies. The same is true for Fedor. He enjoys shopping in the neighboring s ...
- sql语句 isnull(列名,'')='' /STUFF的意思
(1) SELECT SYXH,ZYHM,YEXH,ISNULL(YETZ,'') AS YETZ ,RYKSMC,RYBQMC,HZXM FROM YG_BRSYK 如果列名数据等于NULL,那么 ...
- 扒来的lstdc++.6.0.9有效解决方案
找到了Xcode10模拟器和真机运行的办法了1.将libstdc++_sim.zip解压,放到目录 /Applications/Xcode.app/Contents/Developer/Platfor ...
- vuex 的基本使用之Module
Module 首先介绍下基本的组件化规则:你可以根据项目组件的划分来拆分 store,每个模块里管理着当前组件的状态以及行为,最后将这些模块在根 store 进行组合. const moduleA = ...
- 配置zsh
.zshrc export ZSH="/root/.oh-my-zsh" ZSH_THEME="robbyrussell" plugins=(git zsh-s ...
- ORM Active Record Data Mapper
What's the difference between Active Record and Data Mapper? https://www.culttt.com/2014/06/18/whats ...
- dp单调性优化
跟着书上的思路学习dp的单调性优化觉得还是很容易想的. 数据范围: dp,数据范围是百万,这应该是O(n)的算法了. 首先不难想到设f[i]表示到第i个百米所能达到的最大能量,那么f[n]即为所求. ...
- 使用TidCookieManager得到cookie
1.拖入TIdHTTP控件,HandleRedirect设为True,否则可能会出现HTTP 307错误. 2.主要的设置在Request里. 2.1 userAgent应该改为Mozilla/4.0 ...
- 操作系统->数组越界(待完善)
工作中无意间发现了一段可能存在数组越界的代码, 就在本地仿者写了一段越界的小程序, 先记录下,待以后看操作系统知识的时候,再深入分析 #include <stdio.h> #include ...
- SearchContextMissingException[No search context found for id [1545782]]
这个原因是scroll的时间设置不够久,设久一些就可以了.