小编Ste*_*ano的帖子

线程池如何工作,以及如何在像NodeJS这样的异步/等待环境中实现它?

我需要运行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个请求,当一个请求完成时,下一个请求应该开始。

到目前为止,我一直在想(丑陋,因为回调正在开始对f()函数的新调用):

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)

python multithreading asynchronous threadpool node.js

7
推荐指数
1
解决办法
303
查看次数