javascript --- 异步工作流的动态排队技术

很多情况下,使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中的内部类总结

内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑、肢体、器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液、跳动) 显然…

elementPlus关闭弹窗,页面原先滚动条消失

一开始以为是弹窗内容超过一屏引起,改为一屏内也不能解决。 打开控制台,发现弹窗后自动给body标签加上了类el-popup-parent–hidden,关闭后也没去除,因此手动删除该类。 document.getElementsByTagName(body)[0].className ;

在Windows下如何创建虚拟环境(默认情况下)

很多小伙伴平时在使用Python的时候,有的项目需要使用Python2来进行开发,有的项目则是需要Python3来进行开发。当不清楚怎么分开环境的时候,此时两个环境开始打架,彼此傻傻分不清楚。虚拟环境作为隔离的利器应运而生,其…

javascript --- 隐藏内部实现(最小暴露原则)

看下面的一个例子: function doSomething(a) {b a doSomethingElse( a * 2 );console.log( b * 3 ); }function doSomethingElse(a) {return a - 1; }var b;doSomething( 2 ) ; // 15上述代码中的doSomethingElse实际上应该是doSomething的"私有"部分,根据最小暴露…

selenium python 入门-元素定位

环境搭建 安装教程 http://www.testclass.net/selenium_python/install-selenium/ chrome浏览器 还需要下载chrome driver 把下载的chromedriver .exe放到chrome安装目录下的Application目录下和 python所在的安装目录下,比如我的目录是C:\Program Files (x86)\Goog…

ES5程序设计转ES6 笔记

课程链接 1. 立即执行函数 特点:执行结束,立即销毁;独立作用域执行符号()只能跟在表达式后面,不能放在函数声明后分号可以写在前面/后面document为传入实参,doc为形参 ;(function(doc){...co…

DPDK helloworld 源码阅读

在 DPDK Programmers Guides 中的 EAL 一篇中有一个图可以很清晰地看到一个DPDK的应用程序的大致执行思路: 初始化检查CPU支持、微架构配置等完成后,执行main()函数。 第一步是 rte_eal_init(),核心初始化和启动。其中线程使用的是pthread库&…

javascript --- 作用域和闭包

执行环境: // 定义了变量或函数有权访问的其他数据,决定了它们各自的行为 // 每个执行环境都有一个变量对象与之对应,执行环境中所定义的所有变量和函数都保存在变量对象中 // 某个执行环境中的所有代码执行完毕后,该执行环境被销毁,保存在其中的所有变量和函数定义也随之销毁…

异步下载圆形进度条显示进度

圆形进度条参考链接即可:使用css3实现圆形进度条 需求点击下载后遮罩层显示下载进度: 1.圆形进度条参考以上链接,有点小瑕疵,可更改定位距离实现重合。 2.遮罩层: .lbOverlay{display: none;position: fixed;left: 0;…

javascript基本功

隐式类型转换 var a {_default: 0,toString: function () {return a._default} } if (a 1 && a 2 && a 3) {console.log(解) } 访问一个变量的时候进行拦截 var _default 0 Object.defineProperty(window, a, {get() {return _default} }) if (a 1 &am…

深信服笔试,抓兔子

*问题描述:抓兔子n个排成一排的洞,编号为1到n,兔子每天晚上会跳到相邻的一个洞里,小q每天只能白天检查其中的一个洞,小q会告诉你每天检查的洞,分析是否一定能抓到兔子示例:3个洞,第一…

es6 --- 模块

function foo(){var something cool;var another [1, 2, 3];function doSomething() {console.log( something );}function doAnother() {console.log( another.join( " ! " ) );} } // 是一个不明显的闭包,doSomething()和doAnother()保持了foo的内部作用域接下来…

Java之递归遍历目录,修改指定文件的指定内容

EditProperties.java 1 package PropertiesOperation.Edit;2 3 import java.io.File;4 5 /**6 * 替换指定Porpoerties文件中的指定内容7 * 三个参数:8 * filePath:存放properties文件的目录9 * srcStr:需要替换的字符串 10 * desStr&…

学习日志---7

1.复习Linux hadoop hdfs MapReduce基础知识 1,列举linux常用命令 shutdown now reboot mkdir mkdir -p touch filename rm -r filename rm -rf filename vi filename i--->可编辑状态 esc --> : --->wq 保存退出 q! wq! cat grep find ifconfig ping user…

javascript --- 属性描述符

从ES5开始,所有的属性都具备了属性描述符 var myObject {a: 2 };Object.getOwnPropertyDescriptor(myObject, "a"); //{ // value:2, // writable: true, // 可写 // enumerable: true, // 可枚举 // configurble: true // 可配置 //}定义属性…

看了吗网址链接

sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId1005269003&utm_campaigncommission&utm_sourcecp-400000000398149&utm_mediumshare # -*- coding: utf-8 -*- ""&qu…

JMeter 性能测试进阶实战

课程简介 本课程制作的主要目的是为了让大家快速上手 JMeter,期间穿插了大量主流项目中用到的技术,以及结合当今主流微服务技术提供了测试 Dubbo 接口、Java 工程技术具体实施方案,注重实践、注意引导测试思维、拒绝枯燥的知识点罗列、善于用…

javascript --- 混入

显示混入: function mixin(sourceObj, targetObj){for(var key in sourceObj){ // 遍历source中的所有属性if(!(key in targetObj)) { // 找到targetz中没有的属性targetObj[key] sourceObj[key];}}return targetObj; }var Vehicle {engines: 1,iginition: function() {c…

php源码代目录

ext :存放动态和内建模块的目录,在这里可以找到所有的php官方亏站,并且也可以在这里编写扩展; main:包含php的主要宏定义; pear: PHP扩展与应用库; sapi:包含不同服务器抽象层的代码; TSRM:Zend和PHP的"线程安全资源管理器"目录; Z…

bzoj1231 [Usaco2008 Nov]mixup2 混乱的奶牛——状压DP

题目&#xff1a;https://www.lydsy.com/JudgeOnline/problem.php?id1231 小型状压DP&#xff1b; f[i][j] 表示状态为 j &#xff0c;最后一个奶牛是 i 的方案数&#xff1b; 所以下一个只能是和它相差大于 k 而且不在状态中的奶牛。 代码如下&#xff1a; #include<iostr…