1.阻塞

console.time('main');//代码计时器
//不断循环阻塞了代码的执行
for(var i=0;i<10000000;i++){ }
console.timeEnd('main');
console.log("完成执行了");

2.错误优先的回调函数(针对异步操作)

   异步回调函数的设计

    (1)回调函数一定作为最后一个参数出现

      funtion foo1(name,age,callback){} 

      funtion foo2(value,callback1,callback2){} 

    (2)回调函数的第一个参数默接受错误信息,第二个参数才是真正的回调数据(便于外界获取调用的错误情况)

      callback(null,data);第一个参数一般设置为错误的对象,第二个参数才是真正的数据,null就是没有错误

      为什么要把回调函数多加一个参数呢?

      因为在程序执行过程中,有可能出现错误,出现错误要让外界知道,采用的方式就是以参数形式传递(因为异步的时候,是无法通过try catch捕获异常,出了错误,外界是没法知道的)

      约定将错误信息作为回调的第一个参数,为上一步的错误信息

function isEventOrOdd(number,callback){
if(typeof number==='number'){
if(number%2){
callback(null,'当前传入的是奇数');
}else{
callback(null,'当前传入的是偶数');
} }
else{
callback(new Error('你传入的不是数字'));
}
} isEventOrOdd(10,(error,data)=>{
if(error) throw error;
console.log(data);
}); isEventOrOdd(11,(error,data)=>{
if(error) throw error;
console.log(data);
});
isEventOrOdd('asda',(error,data)=>{
if(error) throw error;
console.log(data);
});

运行结果:

3.异步

  setTimeout()

  $.ajax()

  文件操作

  Node所有的会发生阻塞的操作都是异步的

 

4.

  Node采用chrome V8引擎处理JavaScript脚本,V8最大的特点就是单线程运行,一次只能运行一个任务。

  Node大量采用异步操作(asynchronous operation),即任务不是马上执行,而是插在任务队列尾部,等到前面的任务运行完之后再执行。

  提高代码的响应能力

  多线程的缺点:

  (1)创建线程耗费资源

  (2)线程数量有限

  (3)CPU在不同线程之间转换,有个上下文转换,这个转换非常耗时间

  Node最大的性能优势,就是单线程

Nodejs-异步操作的更多相关文章

  1. git npm包管理

    #Node # node 一.安装nodejs 下载地址:http://nodejs.cn/download/ 二.安装git 下载地址:https://git-scm.com/download/wi ...

  2. async/await与promise(nodejs中的异步操作问题)

    此文只是粗略介绍使用方法,欲了解核心概念请参考官方文档或其他资料. 举例写文章详情页面的时候的一个场景:首先更改文章详情中的 PV,然后读取文章详情,然后根据文章详情中文章 Id 查阅该文章评论和该文 ...

  3. NodeJS用递归实现异步操作的链式调用,完成一个简易的命令行输入输出REPL交互接口

    REPL —— Read-Eval-Print-Loop. 00.一门好的编程语言的必要条件 REPL并不是什么高大上的东西,简单的说就是一个从命令行程序,读取终端输入,处理,打印结果,如此循环.这是 ...

  4. Nodejs事件引擎libuv源码剖析之:高效线程池(threadpool)的实现

    声明:本文为原创博文,转载请注明出处. Nodejs编程是全异步的,这就意味着我们不必每次都阻塞等待该次操作的结果,而事件完成(就绪)时会主动回调通知我们.在网络编程中,一般都是基于Reactor线程 ...

  5. nodejs事件轮询详述

    目录 概述 nodejs特点 事件轮询 关于异步方法 概述 关于nodejs的介绍网上资料非常多,最近由于在整理一些函数式编程的资料时,多次遇到nodejs有关的内容.所以就打算专门写一篇文章总结一下 ...

  6. Nodejs - 如何用 eventproxy 模块控制并发

    本文目标 本文的目标是获取 ZOJ 1001-1010 每道题 best solution 的作者 id,取得数据后一次性输出在控制台. 前文 如何用 Nodejs 分析一个简单页面 我们讲了如何用 ...

  7. NodeJs并发异步的回调处理

    这里说并发异步,并不准确,应该说连续异步.NodeJs单线程异步的特性,直接导致多个异步同时进行时,无法确定最后的执行结果来回调.举个简单的例子: for(var i = 0; i < 5; i ...

  8. nodejs的第四天学习笔记

    一. ECMAScript6(es2015)es6语法 es6/es2015,在es5的基础上扩展了很多新的功能,我们要学习仅仅是es6中的部分常用新功能,这些功能在使用的时候一定要慎重,因为他们之中 ...

  9. NodeJS中的异步I/O、事件驱动

    nodejs的主要特点是单线程.异步I/O.事件驱动.让我们先大概了解一下这些名词的意思. 单线程 单线程是任务按照顺序执行的,并且每次只执行一个任务,只有前面的任务执行完成以后,后面的任务才执行.在 ...

  10. NodeJS学习三之API

    Node采用V8引擎处理JavaScript脚本,最大特点就是单线程运行,一次只能运行一个任务.这导致Node大量采用异步操作(asynchronous opertion),即任务不是马上执行,而是插 ...

随机推荐

  1. Visual Studio 各个版本汇总

    微软开发人员,对开发工具的熟练程度,在一定程度上说明了开发 版本 名称 内部版本 发布日期 支持 .NET Framework 版本 备注 引入 .NET Framework 前[4]  1 Visu ...

  2. 如何将centos7自带的firewall防火墙更换为iptables防火墙

    用惯了centos6的iptables防火墙,对firewall太无感了,那么如何改回原来熟悉的iptables防火墙呢? 1.关闭firewall防火墙 [root@centos7 html]# s ...

  3. 使用nodejs创建加入用户验证的websocket服务

    使用nodejs创建websocket服务是非常简单的(”ws”模块等),网上教程也很多.websocket服务默认没有连接验证,再加上它支持跨域连接,这样就存在“盗连”和并发攻击的风险. nodej ...

  4. Leetcode 78. Subsets (backtracking) 90 subset

    using prev class Solution { List<List<Integer>> res = new ArrayList<List<Integer&g ...

  5. IOS GCD(线程的 串行、并发 基本使用)

    什么是GCD 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自 ...

  6. 实例详解Django的 select_related

    在数据库有外键的时候,使用 select_related() 和 prefetch_related() 可以很好的减少数据库请求的次数,从而提高性能.本文通过一个简单的例子详解这两个函数的作用.虽然Q ...

  7. 【BZOJ3506】[CQOI2014] 排序机械臂(Splay)

    点此看题面 大致题意: 给你\(n\)个数.第一次找到最小值所在位置\(P_1\),翻转\([1,P_1]\),第二次找到剩余数中最小值所在位置\(P_2\),翻转\([2,P_2]\),以此类推.求 ...

  8. Dijkstra单源最短路径,POJ(2387)

    题目链接:http://poj.org/problem?id=2387 Dijkstra算法: //求某一点(源点)到另一点的最短路,算法其实也和源点到所有点的时间复杂度一样,O(n^2); 图G(V ...

  9. [论文理解]关于ResNet的进一步理解

    [论文理解]关于ResNet的理解 这两天回忆起resnet,感觉残差结构还是不怎么理解(可能当时理解了,时间长了忘了吧),重新梳理一下两点,关于resnet结构的思考. 要解决什么问题 论文的一大贡 ...

  10. SecureCRT 设置