multithreading - 有没有办法在 Node.JS 中的工作人员/线程/某些东西之间共享内存?

标签 multithreading node.js parallel-processing fork

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

大多数查询可以在十分之一秒内得到答复。 Node 万岁!

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

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

但是,因为这个数据结构太大了,我想把它分享给workers或者threads或者你有什么,所以我不烧几百兆。这将是非常安全的,因为不会写入数据结构。任何其他语言的典型 'fork()' 都可以做到。

但是,据我所知,在 Node 中进行并行处理的所有标准方法都明确地使这成为不可能。为了安全起见,他们不希望您分享任何内容。

但是有办法吗?

背景:

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

WebWorker API 库和类似库只允许短序列化消息传入和传出工作线程。

Node 的集群使用名为“fork”的调用,但它并不是现有进程的真正分支,它正在生成一个新进程。所以再一次,没有共享内存。

可能真正正确的答案是使用类似文件系统的访问共享内存,即 tmpfs 或 mmap。有一些 Node 库使 mount() 和 mmap() 可用于类似的事情。不幸的是,必须在同步查找和读取之上实现复杂的数据结构访问。我的应用程序使用字典数组等。不用重新实现这一切就好了。

最佳答案

我尝试从 nodejs 编写共享内存访问的 C/C++ 绑定(bind)。 https://github.com/supipd/node-shm

仍在进行中(但为我工作),也许有用,如果有错误或建议,请通知我。

关于multithreading - 有没有办法在 Node.JS 中的工作人员/线程/某些东西之间共享内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14868965/

相关文章:

android - 并行平移和缩放动画

java - JTextArea追加问题

c++ - STL 中不必要的锁定? (Visual C++ Express)

c++ - 从 fork() 移动到线程

javascript - 在 d3 force directed 中,如何通过单击更改 Node 形状?

在 R 中并行运行 for 循环

c# - 使用对象而不是 this 获取锁 - 线程

node.js - 使用环境变量推送 repo

node.js - 如何在modulus中重新部署nodejs服务器而不面临停机?

python - Python 中的并行处理选项