Nei*_*ilK 18 parallel-processing multithreading fork node.js
我有一个Node应用程序,它访问静态的,大型(> 100M),复杂的内存数据结构,接受查询,然后通过HTTP向客户端提供一小部分数据.
大多数查询都可以在十分之一秒内得到解答.Hurray for Node!
但是,对于某些查询,搜索此数据结构需要几秒钟.这很糟糕,因为其他人都要等.
为了有效地为更多客户服务,我想使用某种并行性.
但是,因为这个数据结构太大了,我想在工作者或线程中分享它或者你有什么,所以我不会烧掉数百兆字节.这将是非常安全的,因为数据结构不会被写入.任何其他语言的典型'fork()'都可以.
但是,据我所知,在Node中进行并行化的所有标准方法都明确地使这变得不可能.为安全起见,他们不希望您分享任何东西.
但有办法吗?
背景:
将此数据结构放在数据库中,或使用memcached或类似的东西是不切实际的.
WebWorker API库和类似的只允许将短序列化消息传入和传出工作者.
Node的Cluster使用名为'fork'的调用,但它实际上不是现有进程的分支,而是生成一个新进程.所以再一次,没有共享内存.
可能真正正确的答案是使用类似文件系统的共享内存,即tmpfs或mmap.有一些节点库使mount()和mmap()可用于这样的事情.不幸的是,必须在同步搜索和读取之上实现复杂的数据结构访问.我的应用程序使用dicts数组的数组,依此类推.没有必要重新实现这一切将是很好的.
使用 WAF 构建是旧式(节点 0.6 及以下),新构建是使用 gyp。
您应该查看节点集群(http://nodejs.org/api/cluster.html)。如果没有更多细节,不清楚这是否会对您有所帮助,但这使用 fork 在同一台机器上运行多个节点进程。