标签: ipc

IPC共享内存和线程内存之间的性能差异

我经常听到,与访问线程之间的进程内存相比,访问进程之间的共享内存段没有性能损失.换句话说,多线程应用程序不会比使用共享内存的一组进程更快(不包括锁定或其他同步问题).

但我怀疑:

1)shmat()将本地进程虚拟内存映射到共享段.必须为每个共享存储器地址执行此转换,并且可能代表显着的成本.在多线程应用程序中,不需要额外的转换:所有VM地址都转换为物理地址,就像在不访问共享内存的常规进程中一样.

2)内核必须以某种方式维护共享内存段.例如,当连接到shm的所有进程都被删除时,shm段仍然处于运行状态,并且最终可以被新启动的进程重新访问.可能存在与shm段上的内核操作相关的一些开销.

多进程共享内存系统是否与多线程应用程序一样快?

linux multithreading ipc shared-memory

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

通过域套接字传输的单个数据包大小的实际限制是什么?

我们假设为典型的服务器 - 客户端程序创建了一个Unix域套接字.客户端在套接字上发送10GB缓冲区,同时由服务器使用.

操作系统(Linux/BSD)将10GB缓冲区分成多个数据包并发送/使用它们,还是一次性发送?

如果不能一次发送10GB的域套接字缓冲区,那么单个数据包的实际大小限制是多少?

约束:

  • 该程序将在Linux 2.6.32+和FreeBSD 9+上运行
  • 要发送的缓冲区大小从3字节到最大10GB不等.

unix sockets linux posix ipc

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

D-Bus等效于Windows

有人知道Windows的Linux/D-Bus机制吗?

谢谢

windows winapi ipc dbus

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

2个进程(应用程序)之间共享内存

我找不到这个问题的任何有用的答案,尽管已经多次以不同的方式提出这个问题.

我想在两个进程(两个不同的应用程序)之间共享一个内存,以便其中一个可以写入该内存而另一个可以读取.

这在.NET中可行吗?怎么样?

谢谢

.net memory ipc pipe named-pipes

18
推荐指数
2
解决办法
3万
查看次数

使用WM_COPYDATA在进程之间发送数据

我希望在进程之间发送文本.我已经找到了很多这方面的例子,但没有一个我可以开始工作.这是我到目前为止:

发送部分:

COPYDATASTRUCT CDS;
CDS.dwData = 1;
CDS.cbData = 8;
CDS.lpData = NULL;
SendMessage(hwnd, WM_COPYDATA , (WPARAM)hwnd, (LPARAM) (LPVOID) &CDS);
Run Code Online (Sandbox Code Playgroud)

接收部分:

case WM_COPYDATA:
COPYDATASTRUCT* cds = (COPYDATASTRUCT*) lParam;
Run Code Online (Sandbox Code Playgroud)

我不知道如何构建COPYDATASTRUCT,我刚刚提出了一些似乎有用的东西.调试时,执行WM_COPYDATA情况,但我不知道如何处理COPYDATASTRUCT.

我想在这两个进程之间发送文本.

你可能会说我刚刚开始,我在Code :: Blocks中使用GNU GCC编译器,我试图避免MFC和依赖.

c++ windows ipc wm-copydata

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

为什么/何时使用DDS代替ZeroMQ?

我读了以下内容:

  1. DDS与AMQP对比ZeroMQ
  2. http://mnb.ociweb.com/mnb/MiddlewareNewsBrief-201004.html

似乎没有使用DDS代替zmq的功能:

  1. zmq的延迟更好.
  2. 在我看来,ZMQ的API清晰而简单.
  3. 我不能使用ZMQ来在线程/进程/站之间传输数据.

所以:

  1. 什么时候使用DDS更好?
  2. 与ZMQ相比,DDS 有更好的表现吗?
  3. 是否有使用DDS(而不是ZMQ)的明确目的

谢谢

ipc zeromq data-distribution-service

18
推荐指数
1
解决办法
6894
查看次数

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

管道与消息队列

Linux中的消息队列和管道有什么区别?

linux ipc

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

如何使用Zeromq的inproc和ipc传输?

我是ZERMQ的新手.ZeroMQ具有TCP,INPROC和IPC传输.我正在寻找在Winx64和python 2.7中使用python和inproc的例子,它们也可以用于linux.

此外,我一直在寻找UDP传输方法,但无法找到示例.

我发现的唯一例子是

import zmq
import zhelpers

context = zmq.Context()

sink = context.socket(zmq.ROUTER)
sink.bind("inproc://example")

# First allow 0MQ to set the identity
anonymous = context.socket(zmq.XREQ)
anonymous.connect("inproc://example")
anonymous.send("XREP uses a generated UUID")
zhelpers.dump(sink)

# Then set the identity ourself
identified = context.socket(zmq.XREQ)
identified.setsockopt(zmq.IDENTITY, "Hello")
identified.connect("inproc://example")
identified.send("XREP socket uses REQ's socket identity")
zhelpers.dump(sink)
Run Code Online (Sandbox Code Playgroud)

我正在考虑的用例是:UDP就像分发信息一样.使用TCP测试推/拉更快或者更快.

这是测试示例> ..............

服务器:

import zmq
import time

context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("inproc://example2")

while True:
    #  Wait for next request from client
    message = socket.recv()
    print …
Run Code Online (Sandbox Code Playgroud)

python ipc zeromq inproc

17
推荐指数
3
解决办法
3万
查看次数

在进程之间共享条件变量和互斥:是否必须先锁定互斥锁?

我需要一些帮助来了解如何在C中使用条件变量来解决练习.这是一个小例子:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>

#define OKTOWRITE "/oktowrite"
#define MESSAGE "/message"
#define MUTEX "/lock"

int main(int argc, char** argv)
{
  pthread_cond_t* condition;
  pthread_mutex_t *mutex;
  char* message;
  int des_cond, des_msg, des_mutex;
  int mode = S_IRWXU | S_IRWXG;

  des_mutex = shm_open(MUTEX, O_CREAT | O_RDWR | O_TRUNC, mode);

  if (des_mutex < 0)
  {
    perror("failure on shm_open on des_mutex");
    exit(1);
  }

  if (ftruncate(des_mutex, sizeof(pthread_mutex_t)) == -1)
  {
    perror("Error …
Run Code Online (Sandbox Code Playgroud)

c mutex ipc pthreads condition-variable

17
推荐指数
2
解决办法
3万
查看次数