我需要运行int f(int i)带有10_000参数的函数,由于I / O时间的原因,该过程大约需要1秒钟才能执行。
在Python之类的语言中,我可以使用线程(或者async/await,我知道,但稍后再讨论)来并行化此任务。
如果我希望始终有10个正在运行的线程,并在它们之间分配任务,则可以使用ThreadingPool:
def f(p):
x = [...]
return x
p = ThreadPool()
xs = p.map(f, range(10_000))
Run Code Online (Sandbox Code Playgroud)
但是它是如何工作的呢?如果我想使用类似的东西来实现,比如说NodeJS和f = http("www.google.com", callback),我应该从哪里开始呢?解决此类问题的算法是什么?
同样,我想同时获得10个请求,当一个请求完成时,下一个请求应该开始。
queue = ["www.google.com", "www.facebook.com"]
var f = function(url) {
http.get(url, (e) => {
const newUrl = queue.pop();
f(newUrl);
});
};
for (var i = 0; i < 10; i++) {
f(queue.pop());
}
Run Code Online (Sandbox Code Playgroud)