由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - js里怎么一批批地执行异步操作?
相关主题
大牛们讨论一下异步编程吧HELP:这个死锁是怎么发生的?
同步编程真郁闷异步通讯代码的简化
看了一下C#的async awaitmultiple io thread有用没用啊?
scala的基于future并行async程序怎么写问一个同步问题
akka stream选什么http client?请教一个ASP.net中异步的问题
Typescript是不是实际上反 functional programming 的?向硬盘上写大文件的方法
node.js不可放弃谁能说说同步/异步IO和阻塞/非阻塞IO的区别?
Golang的promise lib哪个好?IE BHO
相关话题的讨论汇总
话题: results话题: 操作话题: waitfor话题: 数据库话题: 异步
进入Programming版参与讨论
1 (共1页)
S*******s
发帖数: 13043
1
就是一共需要1百万个操作,先扔出1千个异步,等它们都执行完,再扔1千个,再等,
直到这1百万个全弄完。怎么实现?es7里有了await可能会方便点,可是我们现在还只
能用es6的promise。
相关的背景:典型的mysql访问是这样的:
var defered=Q.defer();
connection.query(sql,defered.makeNodeResolver());
return defered.promise;
那么我如果有1M条记录,对每个记录都需要访问数据库跑十几条操作,如果写成这样:
function ProcessAll(results ) {
var waitfor=[];
for( var i=0;i< results.length;i++){
waitfor.push( process(results[i]));
}
Q.all(waitfor).then(function(results) {
notifySuc(results);
},function(results){
notifyFail(results);
});
}
因为数据库操作是异步的,就会一下子产生一百万的数据库访问,经常把系统弄得内存
溢出。怎么能让这个操作一小批一小批地进行?这个promise的then我还玩不转啊。
p**r
发帖数: 5853
2
你内存溢出是你results造成的,
你取results的时候处理多少取多少。
c******n
发帖数: 16666
3
你说内存溢出是数据库的还是本地的?服务器的话几百万个应该没问题
那就是本机溢出了?
本地的话 你“1百万个全部弄完” 你是都存在内存里?每个promise好了之后then 写
到filestream里 最后弄完 到all了再来处理不行?
如果只是要flow control的话 你把那个waitfor改成1k 然后来几次直到百万应该就可
以了吧
注意(没看过q 不过应该都一样)promise all这块 只要有一个子promise reject,全
部都会reject掉。
所以要是猛糙快的话 可以自己把数据库请求这块封装到自己新建的new Promise,然后
即便数据库请求被reject了,你也resolve个错误代码啥的 最后一并处理掉

【在 S*******s 的大作中提到】
: 就是一共需要1百万个操作,先扔出1千个异步,等它们都执行完,再扔1千个,再等,
: 直到这1百万个全弄完。怎么实现?es7里有了await可能会方便点,可是我们现在还只
: 能用es6的promise。
: 相关的背景:典型的mysql访问是这样的:
: var defered=Q.defer();
: connection.query(sql,defered.makeNodeResolver());
: return defered.promise;
: 那么我如果有1M条记录,对每个记录都需要访问数据库跑十几条操作,如果写成这样:
: function ProcessAll(results ) {
: var waitfor=[];

s*********y
发帖数: 6151
4
es6 generator is there to solve you problem

【在 S*******s 的大作中提到】
: 就是一共需要1百万个操作,先扔出1千个异步,等它们都执行完,再扔1千个,再等,
: 直到这1百万个全弄完。怎么实现?es7里有了await可能会方便点,可是我们现在还只
: 能用es6的promise。
: 相关的背景:典型的mysql访问是这样的:
: var defered=Q.defer();
: connection.query(sql,defered.makeNodeResolver());
: return defered.promise;
: 那么我如果有1M条记录,对每个记录都需要访问数据库跑十几条操作,如果写成这样:
: function ProcessAll(results ) {
: var waitfor=[];

s*********y
发帖数: 6151
5
d内存溢出的问题另说。 我们用 async-q自己写了个batch processing 每次处理一个
batch 大概几千个request 过几秒再处理。 方法不止一种

【在 s*********y 的大作中提到】
: es6 generator is there to solve you problem
1 (共1页)
进入Programming版参与讨论
相关主题
IE BHOakka stream选什么http client?
两个线程异步通信是不是用信号最好?Typescript是不是实际上反 functional programming 的?
c++11很不错,变化很大,现在有人开始用在实际项目里了吗node.js不可放弃
为啥大家都比较python的web framework呢Golang的promise lib哪个好?
大牛们讨论一下异步编程吧HELP:这个死锁是怎么发生的?
同步编程真郁闷异步通讯代码的简化
看了一下C#的async awaitmultiple io thread有用没用啊?
scala的基于future并行async程序怎么写问一个同步问题
相关话题的讨论汇总
话题: results话题: 操作话题: waitfor话题: 数据库话题: 异步