小编Mua*_*adi的帖子

SocketServer有ThreadingMixIn和ForkingMixIn的任何池吗?

我试图使用BaseHttpServer创建一个http代理,它基于SocketServer,它有2个异步Mixins(ThreadingMixIn和ForkingMixIn)

他们在每个请求上工作的那两个问题(为每个请求分配一个新线程或fork一个新的子进程)

是否有一个Mixin利用一个让我们说4个子进程和每个40个线程的池,所以请求由那些已经创建的线程处理?

因为这会带来巨大的性能提升,我想这会节省一些资源.

python concurrency asyncsocket socketserver python-multithreading

6
推荐指数
2
解决办法
4453
查看次数

使用生成器和Promise进行Node.js功能编程

摘要

node.js中的函数式编程是否足够通用?它是否可以用于处理小批量的db记录而不在使用中将所有记录加载到内存中toArray(从而耗尽内存)的现实问题。您可以阅读有关背景的批评。我们想用异步生成器演示这种node.js库的Mux和DeMux以及fork / tee / join功能。

语境

我在质疑使用任何函数式编程工具(例如ramdalodashimlazy)在node.js中进行函数式编程的有效性和普遍性)甚至自定义的。

给定

来自MongoDB游标的数百万条记录可以使用 await cursor.next()

您可能需要阅读更多内容about async generatorsfor-await-of

对于虚假数据,可以使用(在节点10上)

function sleep(ms) {
    return new Promise((resolve) => setTimeout(resolve, ms));
}
async function* getDocs(n) {
  for(let i=0;i<n;++i) {
     await sleep(1);
     yield {i: i, t: Date.now()};
  }
}
let docs=getDocs(1000000);
Run Code Online (Sandbox Code Playgroud)

通缉

我们需要

  • 第一份文件
  • 最后文件
  • 文件数量
  • 分为n个文档的批处理/批量处理,并为该批量处理发出一个socket.io事件

确保批次中包含第一个和最后一个文档,并且不消耗它们。

约束条件

数百万条记录不应加载到ram中,应该对其进行迭代,最多只能保存其中的一批。

可以使用常规的nodejs代码完成此要求,但也可以使用诸如此处的 applyspec之类的方法来完成。

R.applySpec({
  first: R.head(),
  last: R.last(),
  _: …
Run Code Online (Sandbox Code Playgroud)

functional-programming node.js lodash ramda.js

5
推荐指数
1
解决办法
289
查看次数