小编Nei*_*ilK的帖子

有没有办法在Node.JS中的worker/threads/something之间共享内存?

我有一个Node应用程序,它访问静态的,大型(> 100M),复杂的内存数据结构,接受查询,然后通过HTTP向客户端提供一小部分数据.

大多数查询都可以在十分之一秒内得到解答.Hurray for Node!

但是,对于某些查询,搜索此数据结构需要几秒钟.这很糟糕,因为其他人都要等.

为了有效地为更多客户服务,我想使用某种并行性.

但是,因为这个数据结构太大了,我想在工作者或线程中分享它或者你有什么,所以我不会烧掉数百兆字节.这将是非常安全的,因为数据结构不会被写入.任何其他语言的典型'fork()'都可以.

但是,据我所知,在Node中进行并行化的所有标准方法都明确地使这变得不可能.为安全起见,他们不希望您分享任何东西.

但有办法吗?

背景:

将此数据结构放在数据库中,或使用memcached或类似的东西是不切实际的.

WebWorker API库和类似的只允许将短序列化消息传入和传出工作者.

Node的Cluster使用名为'fork'的调用,但它实际上不是现有进程的分支,而是生成一个新进程.所以再一次,没有共享内存.

可能真正正确的答案是使用类似文件系统的共享内存,即tmpfs或mmap.有一些节点库使mount()和mmap()可用于这样的事情.不幸的是,必须在同步搜索和读取之上实现复杂的数据结构访问.我的应用程序使用dicts数组的数组,依此类推.没有必要重新实现这一切将是很好的.

parallel-processing multithreading fork node.js

18
推荐指数
2
解决办法
8857
查看次数