任务队列适用在什么场景下?
高并发
日常情况中,如果并发数超过一定数量,会导致数据出错,系统奔溃,如果一台破电脑同时要执行10W个复杂同步或异步函数会怎样,同样是运行10W个函数如果用队列控制并发运行数,稳定性大大提升。并发任务时导致数据库错乱,不单单可以用锁来实现
如果有并发任务要对表进行读取并修改的操作,并发的时候会发生什么情况,会同时读取并修改了数据,这肯定不是我们想要的。- 抢红包的实现,也是是用队列来一个一个读取并返回
抢红包最好的实现方法就是用队列来实现,你们肯定会说不是可以用乐观锁,悲观锁,但是用这些锁的话,大家同时访问,只有一个人抢到了红包,其他人都报错误,这样肯定是不行的。
任务队列用法
-
创建Queue对象并设置并行数量
- var q = new Queue(2); //并发数2 加入任务队列
- q.set(fn1);//fn1为Promise函数
- q.set(fn1).set(fn3); 加入并启动
- q.set(fn1).set(fn2).set_run(fn5);//set_run()加入并启动 当前任务数
- q.get();//输出任务数:n 启动
- q.run(); 暂停
- q.pause();//暂停任务队列 恢复
- q.rec();//恢复任务队列
demo 模拟异步函数代码
var q = new Queue(2);//创建队列对象
var ks = new Date().getTime();//记时
var fn1 = function () {
//函数1
var deferred = Q.defer();
setTimeout(function