概述:
我有一个NodeJS服务器,里面有几个C ++模块,执行一个整体“工作”。这些模块中的一些对象(C ++对象,比如说“单例”)很常见,初始化后的状态应该在每个模块之间共享。这些对象的初始化必须在服务器启动期间完成一次。
示例:
A,B - 应该作为一个作业执行的独立C ++模块
x,y,z - 共享C ++对象(可能很多)
问题:
你能否告诉我在所有C ++模块之间是否有一些已知的最佳初始化和共享这些对象的做法?
NodeJS中特定C ++模块的生命周期是什么?什么时候从记忆中删除?
答案 0 :(得分:1)
如果您正在使用boost库,则可以创建可在模块之间共享的内存段。
例如,您希望在模块A和B之间共享100 int
。
然后您的模块A的代码将如下所示(为简洁起见,省略了错误检查):
// Shared memory creation
shared_memory_object shm (create_only, "My100INTs", read_write);
shm.truncate(100 * sizeof(int));
mapped_region region(shm, read_write);
// Get the address of the first element
int* theMemory = static_cast<int*>(region.get_address());
// Initialization Code
for (int i = 0; i < 100; i++) {
*(theMemory + i) = i;
}
由于A包含初始化代码,因此在您的node.js代码中,在需要B之前必须先要求A.
在模块B中,您可以像这样访问它们(为简洁起见,省略了错误检查):
// Open the previously created shared memory
shared_memory_object shm (open_only, "My100INTs", read_write);
mapped_region region(shm, read_write);
// Get the address of the first element
int* theMemory = static_cast<int*>(region.get_address());
// Do modification
for (int i = 0; i < 100; i++) {
*(theMemory + i) *= 2;
}
此共享内存具有内核或文件系统持久性,因此,当您不再使用它时,必须显式释放它们。你可以这样做:
delete region;
remove("My100INTs");
希望这有帮助。