标签: shared-memory

我何时应该使用范围锁定(应用程序,服务器等)与ColdFusion中的命名锁定?

什么时候适合使用<cflock scope ="application">或者它与<cflock name ="foo">相反?

具体来说,我对使用CFLock保护应用程序,会话或服务器范围中的共享对象感兴趣,但我也有兴趣了解ColdFusion中锁定的不同用法.

coldfusion locking shared-memory coldfusion-8

11
推荐指数
1
解决办法
3963
查看次数

System V在Python中共享内存?

我怎样才能使用的shmat(),shmdt(),shmctl(),shmget()从Python的电话?它们隐藏在标准库的某个地方吗?

Update0

我正在使用可以在Ubuntu存储库或Python标准库(现在或将来的版本)中找到的System V绑定.

python ipc shared-memory sysv

11
推荐指数
2
解决办法
1万
查看次数

应该'managed_shared_memory'分配多少内存?(促进)

我在寻找一个明确的答案(如果确实存在)有多少内存应该通过创建共享内存的静态块时被分配boost::interprocessmanaged_shared_memory.即使是官方的例子似乎也会分配任意大块的内存.

考虑以下结构:

// Example: simple struct with two 4-byte fields
struct Point2D {
  int x, y;
};
Run Code Online (Sandbox Code Playgroud)

我最初的反应是必要的大小是8个字节,或者sizeof(Point2D).当我尝试构造一个对象时,这会失败,在运行时给出了seg-fault.

// BAD: 8 bytes is nowhere near enough memory allocated.
managed_shared_memory segment(create_only, "My shared memory", sizeof(Point2D));
Run Code Online (Sandbox Code Playgroud)

什么读/写操作导致seg-faults?堆栈操作?临时分配segment.construct()?分配共享内存时需要多少开销?

通过试错我发现,通过4大小乘可以为上述结构的工作,但是当我开始增加更多的领域,以我的分崩离析struct.所以,这是一个糟糕的黑客.

有些人可能会争辩说,"内存很便宜",在现代电脑,但我不同意这种理念和分配不喜欢比我更需要的,如果我能避免它.我昨天在Boost文档中挖了一遍,找不到任何建议.这是今天要学习新东西的!

c++ boost shared-memory interprocess multiprocess

11
推荐指数
1
解决办法
4641
查看次数

python进程之间的共享内存

我试图想出一种在python进程之间共享内存的方法.基本上存在多个python进程需要能够READ(仅读取)和使用(无突变)的对象.现在这是使用redis + strings + cPickle实现的,但cPickle占用宝贵的CPU时间,所以我不想使用它.我在互联网上看到的大多数python共享内存实现似乎都需要文件和泡菜,这基本上就是我已经在做的,而且正是我想要避免的.

我想知道的是,是否有办法编写类似...基本上是内存中的python对象数据库/服务器和相应的C模块来与数据库连接?

基本上C模块会向服务器请求写入对象的地址,服务器将使用地址进行响应,然后模块将写入对象,并通知服务器具有给定密钥的对象被写入磁盘.指定的位置.然后,当任何进程想要使用给定键检索对象时,他们只会向db请求给定键的内存位置,服务器将响应该位置,并且模块将知道如何在内存中加载该空间.将python对象传回python进程.

这完全是不合理的还是真的很难实施?我在追逐那些不可能的东西吗?欢迎大家提出意见.谢谢你上网.

c python shared-memory

11
推荐指数
2
解决办法
1万
查看次数

**用于共享内存的非Boost**STL分配器

由于我工作的政策,我无法使用比1.33.1更新的Boost版本,并且无法使用比4.1.2更新的GCC版本.是的,它是垃圾,但我无能为力.Boost 1.33.1不包含进程间库.

也就是说,我的一个项目需要将一个std::map(或更可能是一个std::unordered_map)放入共享内存中.当进程由单个进程("服务器")加载并由许多其他进程读取时,它仅被写入/修改一次.我之前没有做过共享内存IPC所以这对我来说是一个相当新的领域.我看一下,shmget()但似乎我不能继续使用相同的共享内存密钥进行分配(因为我认为STL容器分配器需要它).

是否还有其他使用共享内存的NON-BOOST STL分配器?

编辑:已经做过的事情.Dobbs博士在2003年有一篇关于如何做到这一点的文章,我开始用它作为参考.但是,代码清单不完整,并且指向它们的链接会重定向到主站点.

编辑编辑:我不仅仅重写Boost.Interprocess的唯一原因是因为涉及的代码量很大.我只是想知道是否有一些比较简短的专门针对POSIX共享内存,我能重新从头开始写,因为网络之间的数据传输也受到了多天的审批流程...

c++ ipc shared-memory

11
推荐指数
1
解决办法
3554
查看次数

postgresql共享内存设置

大家好!

我们目前有以下与共享内存相关的参数:

Postgres的

shared_buffers = 7GB
max_connections = 1 500
max_locks_per_transaction = 1 024
max_prepared_transactions = 0 (not set)
Run Code Online (Sandbox Code Playgroud)

系统

SHMALL = 2 097 152
SHMMAX = 17 670 512 640
SHMMNI = 4096
Run Code Online (Sandbox Code Playgroud)

RAM的数量是24 693 176k

我们需要将max_connections增加到3 000.当我们尝试这样做时,我们遇到了错误

[1-1] FATAL:  could not create shared memory segment: No space left on device
[2-1] DETAIL:  Failed system call was shmget(key=5432001, size=8964661248, 03600)
[3-1] HINT:  This error does *not* mean that you have run out of disk space.
It occurs …
Run Code Online (Sandbox Code Playgroud)

postgresql shared-memory

11
推荐指数
1
解决办法
1万
查看次数

使我的NumPy数组在进程间共享

我已经阅读了很多有关共享数组的问题,对于简单的数组来说这似乎很简单,但我仍然试图让它适用于我拥有的数组.

import numpy as np
data=np.zeros(250,dtype='float32, (250000,2)float32')
Run Code Online (Sandbox Code Playgroud)

我尝试以某种方式mp.Array接受它data,尝试将其转换为共享数组,我也尝试使用ctypes创建数组:

import multiprocessing as mp
data=mp.Array('c_float, (250000)c_float',250)
Run Code Online (Sandbox Code Playgroud)

我设法使代码工作的唯一方法是不将数据传递给函数,而是将编码的字符串传递给未压缩/解码,但最终会调用n(字符串数)进程,这似乎是多余的.我希望的实现是基于将二进制字符串列表切换为x(进程数)并传递此块,data以及a index除了data在本地修改之外的有效进程,因此关于如何使其共享的问题,任何示例工作使用自定义(嵌套)numpy数组已经是一个很好的帮助.

PS:这个问题是Python多处理的后续问题

python numpy shared-memory multiprocessing

11
推荐指数
1
解决办法
3257
查看次数

通过共享内存将数据从c ++流式传输到c#

我试图使用共享内存将数据从c ++应用程序流式传输到C#应用程序.根据我发现的例子,我有:

c ++(发送)

    struct Pair {
    int length; 
    float data[3];
};

#include <windows.h>
#include <stdio.h>

struct Pair* p;
HANDLE handle;

float dataSend[3]{ 22,33,44 };

bool startShare()
{
    try
    {
        handle = CreateFileMappingW(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(Pair), L"DataSend");
        p = (struct Pair*) MapViewOfFile(handle, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, sizeof(Pair));
        return true;
    }
    catch(...)
    {
        return false;
    }

}


int main()
{

    if (startShare() == true)
    {

            while (true)
            {
                if (p != 0) {

                //dataSend[0] += 1;  // here the …
Run Code Online (Sandbox Code Playgroud)

c# c++ shared-memory

11
推荐指数
1
解决办法
2495
查看次数

是`postMessage`还是屈服于事件循环或类似的同步共享内存?

我没有在JavaScript规范中看到任何内容,建议的DOM规范扩展相关SharedArrayBuffer,或者当前的WHAT-WG HTML规范建议当一个线程将消息发布到另一个线程和另一个线程时,将跨线程同步/更新共享内存处理消息.(已经将共享内存发送给另一个之后.)但是,我也无法通过实验验证它没有发生(在我的测试中,我没有看到陈旧的值).是否有一些这样的保证,我错过了,如果是这样,它在哪里得到保证?例如,它是否记录在案postMessage而且我错过了它,或者有什么东西可以回到事件循环/作业队列来保证它(因为处理来自另一个线程的消息涉及这样做)等等?或者,它绝对不能保证(并且信息在某个地方的规范中)?

不要推测或做出"合理猜测".我正在寻找难以获得的信息:来自规范来源的引文,一个可复制的实验,表明它不能得到保证(尽管我认为这是一个问题,它是否仅仅是一个实现错误),那样的事情.


下面是我的测试的源,但尚未能够捕获不同步的内存.要运行它,您需要使用当前支持的浏览器,SharedArrayBuffer我认为此刻意味着Chrome v67或更高版本(Firefox,Edge和Safari都有支持,但在2018年1月禁用它以响应Spectre和Meltdown Chrome也做了,但是在启用了网站隔离功能的平台上的v67 [2018年7月]重新启用了它.

sync-test-postMessage.html:

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Sync Test postMessage</title>
</head>
<body>
<script src="sync-test-postMessage-main.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

sync-test-postMessage-main.js:

const array = new Uint32Array(new SharedArrayBuffer(Uint32Array.BYTES_PER_ELEMENT));
const worker = new Worker("./sync-test-postMessage-worker.js");
let counter = 0;
const limit = 1000000;
const report = Math.floor(limit / 10);
let mismatches = 0;
const now = performance.now();
const log …
Run Code Online (Sandbox Code Playgroud)

javascript shared-memory sharedarraybuffer

11
推荐指数
1
解决办法
203
查看次数

Linux上用于Java/C++应用程序的共享内存IPC的良好替代品

我目前正在使用Java和C++应用程序之间的IPC共享内存,但寻找更方便的替代方案.

有人可以建议一个性能和速度相同的更好的方法吗?

谢谢!

c++ java linux ipc shared-memory

10
推荐指数
2
解决办法
1万
查看次数