很多情况下,使用async.series和async.paralle存在一个明显的问题,即:
1.其任务队列是静态的,在其调用前,一定要明确任务队列的数量,一旦明确了任务队列的数量,就不能改变.
2.倘如要同时并发读取上千个文件,使用async.paralle明显不可能(各线程抢资源,根本不够用),使用async.series…(运行时间可想而知…)

好在有一种async.queue方法:

// async.queue
var async = require('async');
function worker(data, callback) {console.log(data);callback();
}
var concurrency = 2;
var queue = async.queue(worker, concurrency);
queue.push(1);
queue.push(2);
queue.push(3);// 注:async.queue有2个参数:worker函数和concurrency(并发度)
// concurrency比较好理解,即并发的最大数量(本例为:2),
// worker函数,是处理数据的方式,它接受2个参数(data, callback);
// queue.drain
// 可以给queue队列加一个完工事件处理
var async = require('async');
function worker(data, callback) {setTimeout(callback, data);
}
var concurrency = 2;
var queue = async.queue(worker, concurrency);
var start = new Date;
queue.drain = function() {console.log('Completed in ' + (new Date - start) + 'ms');
};queue.push([100, 300, 200]);// 注:以上函数会执行2次循环,每次循环会总队列中读取2个数据(第一次100和300,第二次200);
// 2次循环过后会执行drain函数,打印出'Completed'字符串和时间.

参考《JavaScript异步编程》 — 设计快速响应的网络应用 P80~P82

javascript --- 异步工作流的动态排队技术相关推荐

  1. [书籍精读]《JavaScript异步编程》精读笔记分享

    写在前面 书籍介绍:本书讲述基本的异步处理技巧,包括PubSub.事件模式.Promises等,通过这些技巧,可以更好的应对大型Web应用程序的复杂性,交互快速响应的代码.理解了JavaScript的 ...

  2. 写给初学者的JavaScript异步编程和背后思想

    导读: 对于接触JavaScript这门编程语言没有多久的本菜鸡而言,在相当长的一段时间内,我都完全无法理解这门语言中的异步编程,不明白什么叫异步编程以及为什么需要异步编程.为什么顺序执行程序就不行了 ...

  3. 网页javascript加载不出_写给初学者的JavaScript异步编程和背后思想

    导读:对于接触JavaScript这门编程语言没有多久的本菜鸡而言,在相当长的一段时间内,我都完全无法理解这门语言中的异步编程,不明白什么叫异步编程以及为什么需要异步编程.为什么顺序执行程序就不行了呢 ...

  4. 【学习笔记】Part1·JavaScript·深度剖析-函数式编程与 JS 异步编程、手写 Promise(二、JavaScript 异步编程)

    [学习笔记]Part1·JavaScript·深度剖析-函数式编程与 JS 异步编程.手写 Promise(课前准备) [学习笔记]Part1·JavaScript·深度剖析-函数式编程与 JS 异步 ...

  5. JavaScript异步编程原理

    众所周知,JavaScript 的执行环境是单线程的,所谓的单线程就是一次只能完成一个任务,其任务的调度方式就是排队,这就和火车站洗手间门口的等待一样,前面的那个人没有搞定,你就只能站在后面排队等着. ...

  6. 动态网页技术--JSP(7)

    动态网页技术--JSP(7) 一.Ajax 同步传输:一问一答的样式,有发送的请求就返回响应 异步传输:多问多答的样式,不需要刷新整个页面,就可以完成局部数据访问 开发步骤: 1.事件驱动函数 2.如 ...

  7. JavaScript异步调用的发展历程

    同步与异步 通常,代码是由上而下依次执行的.如果有多个任务,就必须排队,前一个任务完成,后一个任务才能执行.这种连续的执行模式就叫做同步. a(); b(); c(); 复制代码 上面代码中,a.b. ...

  8. 前端知识点回顾之重点篇——JavaScript异步机制

    JavaScript异步机制 来源:https://www.cnblogs.com/zhaodongyu/p/3922961.html JavaScript是单线程异步执行的,单线程意味着代码在任务队 ...

  9. Javascript异步编程之一异步原理

    本系列的例子主要针对node.js环境,但浏览器端的原理应该也是类似的. 本人也是Javascript新手,把自己这段时间学习积累的要点总结下来,希望可以对同样在学习Javascript/node.j ...

最新文章

  1. nginx转发端口路由器再转发
  2. 设计模式-模版方法模式
  3. js与c语言互相调用,Objc与JS间相互调用
  4. 微星小飞机怎么显示帧数?方法介绍
  5. c语言指针实验报告总结,指针(C语言实验报告).doc
  6. Scintilla教程(1): 入门介绍
  7. 【论文阅读】Multitask Prompted Training Enables Zero-shot Task Generalization
  8. python pip安装镜像源
  9. 分享一个可以让你在朋友圈赚钱的小工具
  10. 《皮囊》——蔡崇达,读后感
  11. android小说阅读、MVP + RxJava + Retrofit项目、证件拍照裁剪、蓝牙锁等源码
  12. 最好最常用的国外邮箱推荐!注册非常简单!
  13. python图片镜像翻转_python图像处理之镜像实现方法
  14. @Valid 注解详解 Java Bean Validation的前世今生
  15. centos7安装pip
  16. 我的JavaScript学习笔记续
  17. 【大话QT之十】实现FTP断点续传
  18. LaTeX 中插入中英双语目录
  19. 群晖 Synology NAS 加密同步至 Dropbox (无Docker版本)
  20. Gatsby CLI命令说明

热门文章

  1. java和python混合编程_浅谈C++与Java混合编程
  2. 利用python制作漂亮的词云图_利用python制作漂亮的词云图
  3. GPU Gems2 - 2 使用基于GPU几何体裁剪图的地形渲染(Terrain Rendering Using GPU-Based Geometry Clipmaps)
  4. 10分钟看懂浏览器的渲染过程及优化
  5. 【PyQt5】QT designer + eclipse 集成开发
  6. Windows2008安装组件命令行工具ServerManagerCmd用法介绍
  7. python 之configparser模块
  8. ListMapSet的操作和遍历 1
  9. 微信开放平台全网发布时,检测失败 —— C#
  10. 安装scapy遇到的问题