标签: shared-memory

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

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

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

谢谢!

c++ java linux ipc shared-memory

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

如何在LynxOS/POSIX中同步对共享内存的访问?

我正在LynxOS SE(POSIX conformant)系统上实现两个进程,它们将通过共享内存进行通信.

一个过程将充当"生产者"而另一个过程将充当"消费者".在多线程系统中,我的方法是使用互斥和condvar(条件变量)对,消费者在condvar(with pthread_cond_wait)上等待,生产者pthread_cond_signal在更新共享内存时用信号通知它(with ).

如何在多进程架构而不是多线程架构中实现这一目标?

是否有LynxOS/POSIX方法来创建可在进程之间使用的condvar/mutex对?
或者在这种情况下,其他一些同步机制更合适吗?

c posix ipc shared-memory lynxos

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

IPC速度和比较

我正在尝试实现一个涉及不同模块的IPC的实时应用程序.这些模块正在进行一些数据密集型处理.我在原型中使用消息队列作为IPC的主干(Activemq),这很容易(考虑到我是一个完全的IPC新手),但它非常慢.

这是我的情况:

  • 我已经隔离了IPC部分,以便将来可以改变其他方式.
  • 我有3周的时间来实现另一个更快的版本.;-(
  • IPC应该很快,但也比较容易上手

我一直在研究不同的IPC方法:套接字,管道,共享内存.但是,我没有IPC的经验,我绝对没有办法在3周内让这个演示失败......哪种IPC是安全的开始?

谢谢.百合

sockets ipc real-time pipe shared-memory

9
推荐指数
2
解决办法
9833
查看次数

在禁用TCP的情况下从Java连接到SQL Server

我正在尝试从Java连接到本地数据库(SQL Server 2008).我已根据客户要求禁用了tcp连接,但我无法连接.我必须禁用服务SQL Server Browser.

我用Java编写下一个语句:

conexion = DriverManager.getConnection("jdbc:sqlserver://localhost\\SQLEXPRESS;user=user;password=password");
Run Code Online (Sandbox Code Playgroud)

我有以下错误:

"java.net.SocketTimeoutException:接收超时".(然后它告诉我可能有防火墙,我应该运行SQL Server浏览器).

如果我尝试从Microsoft SQL Server Managment Studio连接,我可以连接相同的参数:

Server type: Database Engine
Server name: localhost\SQLEXPRESS
Authentication: SQL Server Authentication
User: user
Password: password
Run Code Online (Sandbox Code Playgroud)

我不知道我是不是做错了我的Java但SQL Server Managment Studio实际上是一个客户端,所以如果它可以连接任何客户端应该可以.

请回答.如果您需要更多信息,请直接询问.

sql sql-server jdbc shared-memory

9
推荐指数
1
解决办法
4088
查看次数

共享内存段内的指针

我一直在尝试这几个小时,谷歌所有我想到的东西,但我会发疯.

我有一个结构:

typedef struct {
  int rows;
  int collumns;
  int* mat;
  char* IDs_row;
} mem;
Run Code Online (Sandbox Code Playgroud)

我不知道int*(一个矩阵)和char*的大小,直到稍后.

当我这样做时,我创建了这样的共享内存:

mem *ctrl;
int size = (2 + ((i-1)*num_cons))*sizeof(int) + i*26*sizeof(char); //I have the real size now
shmemid = shmget(KEY, size, IPC_CREAT | 0666);
if (shmemid < 0) {
    perror("Ha fallado la creacion de la memoria compartida.");
    exit(1);
}
ctrl = (mem *)shmat(shmemid, 0, 0);
if (ctrl <= (mem *)(0)) {
    perror("Ha fallado el acceso a memoria compartida");
    exit(2);
}
Run Code Online (Sandbox Code Playgroud)

这里没问题.然后我给ctrl-> rows和collumns一个值,并为所有矩阵赋值0.

但在那之后,我在char*和bam中写了一些东西,分段错误.

调试程序我看到指针,mat和IDs_row都为null.如何在共享内存段中为它们提供正确的值? …

c linux shared-memory

9
推荐指数
2
解决办法
8690
查看次数

我有一个在linux上运行的c ++程序,是否可以让它定期将状态快照存储在共享内存中以进行崩溃后恢复?

我不知道如何去做,因为我已经看到了用于进程间通信的共享内存的例子.我想知道我是否可以从服务器中利用它来获取某些对象的定期快照,并以某种格式将它们转储到共享内存中...如果我的程序崩溃了......可以在重新启动程序时检索复苏.这可行吗?如果是这样,我可以看一下如何开始?

更新:我在某处看到Linux上的共享内存(我在linux上)是持久性的,所以我想我可能能够定期保存状态快照而无需辅助进程.比方说,一个不断更新的结构,我每隔几秒就转储到共享内存.我选择共享内存而不是文件的原因纯粹是为了速度,因为状态会是很多二进制数据.

c++ linux shared-memory

9
推荐指数
1
解决办法
530
查看次数

如何在C中的共享内存中创建信号量?

我的任务是创建两个不同的C文件,然后使用信号量进行进程同步(我同时运行两个C文件).

我主要担心的是:如果我想在两个进程中访问信号量(C文件的可执行文件),我需要在共享内存中创建信号量.我还需要创建二进制信号量.

因为这是我的第一个程序,有人可以建议如何开始这个吗?

我能够创建和使用共享内存,在线程中使用信号量.我在YouTube上看了一些讲座,但找不到合适的解决方案.

c semaphore shared-memory

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

在特定NUMA节点上创建命名共享内存?

与此类似帖子,我想创建一个名为共享内存段(通过创建shm_open()+ mmap()特定的NUMA节点(不一定是本地)上的CentOS 7).该帖子建议通过使用来实现numa_move_pages().

我还有几个问题:

  1. 如果另一个进程(在不同NUMA的本地核心上运行)稍后启动并且mmap()s到同一个命名的共享内存段,OS是否会决定将命名的共享内存段移动到此进程的本地NUMA?如果是,我该如何预防呢?

  2. 是否还有其他情况,在我指定后,命名共享内存段将被移动到另一个NUMA numa_move_pages()

  3. 给定一个命名的共享内存段/shm/dev,如何检查它属于哪个NUMA节点?

我查看了numactl,它的--membind选项是我想要的,但我不确定如果两个不同的进程使用--membind2个不同的节点会产生什么影响.谁赢?如果#3得到解答,我想我可以测试一下.

谢谢!

c linux shared-memory numactl

9
推荐指数
1
解决办法
328
查看次数

并发队列中的 DispatchQueue 同步与同步屏障

我正在通过 DispatchQueue 障碍,并注意到有两种方法async(flags: .barrier)sync(flags: .barrier)

我理解异步屏障的使用,但与同步屏障混淆。

我的困惑我想做的任务也可以用这个来执行

DispatchQueue.global().sync {

}
Run Code Online (Sandbox Code Playgroud)

那么同步屏障有什么用呢?为什么使用它们?这有多么不同。

DispatchQueue.global().sync(flags: .barrier) {

}
Run Code Online (Sandbox Code Playgroud)

concurrency shared-memory grand-central-dispatch swift

9
推荐指数
3
解决办法
5428
查看次数

使用共享内存将 C++ 程序连接到 Python 脚本

我正在尝试使用共享内存将 C++ 程序连接到 python,但我不知道如何将内存段的名称传递给 python。

这是我的 C++ 代码:

key_t key = ftok("address", 1);
int shm_o;
char* msg = "hello there";
int len = strlen(msg) + 1;
void* addr;

shm_o = shmget(key, 20, IPC_CREAT | 0600);
if(shm_o == -1)
{
    std::cout << "Failed: shmget.\n";
    return 1;
}

addr = shmat(shm_o, NULL, 0);
if(addr == (void*) -1)
{
    std::cout << "Failed: shmat.\n";
    return 1;
}

std::cout << "Shared memory segment created successfully with id: " << shm_o;
memcpy(addr, msg, len);

getchar();
return …
Run Code Online (Sandbox Code Playgroud)

c++ python shared-memory

9
推荐指数
1
解决办法
879
查看次数