繁体   English   中英

C ++多个进程?

[英]C++ multiple processes?

我有一个由两个进程组成的项目,我需要以快速有效的方式在它们之间传递一些数据。

我知道我可以使用套接字来使用TCP来执行此操作,即使这两个进程始终存在于同一台计算机上,但这似乎不是一个非常有效的解决方案。

我看到很多关于在Linux上使用“管道”的信息。 但是我主要想要Windows和Linux(最好通过跨平台库),理想情况是安全,无阻塞。

另一个重要的事情是我需要支持整个应用程序的多个实例(即两个进程),每个实例都有自己独立的通信对象副本。

还有一种跨平台的方式来产生一个新的过程吗?

看一下Boost.Interprocess

Boost.Interprocess简化了通用进程间通信和同步机制的使用,并提供了大量的:

  • 共享内存。
  • 内存映射文件。
  • 信号量,互斥量,条件变量和可升级的互斥锁类型,用于将它们放在共享内存和内存映射文件中。
  • 这些同步对象的命名版本,类似于UNIX / Windows sem_open / CreateSemaphore API。
  • 文件锁定。
  • 相对指针。
  • 消息队列。

Boost.Interprocess还提供更高级别的进程间机制,以动态分配共享内存或内存映射文件的部分(通常,分配固定大小的内存段的部分)。 使用这些机制,Boost.Interprocess提供了有用的工具来在共享内存和内存映射文件中构造C ++对象,包括类似STL的容器:

  • 在共享内存或内存映射文件中动态创建匿名和命名对象。
  • 类似STL的容器与共享内存/内存映射文件兼容。
  • 类似STL的分配器准备好实现多个内存分配模式(如池)的共享内存/内存映射文件。

Boost.Interprocess已在以下编译器/平台中进行了测试:

  • Visual 7.1 Windows XP
  • Visual 8.0 Windows XP
  • GCC 4.1.1 MinGW
  • GCC 3.4.4 Cygwin
  • 英特尔9.1 Windows XP
  • GCC 4.1.2 Linux
  • GCC 3.4.3 Solaris 11
  • GCC 4.0 MacOs 10.4.1

对于IPC, Windows支持命名管道 ,就像Linux一样 ,除了管道名称遵循不同的格式,因为两个操作系统之间的路径格式不同。 这是您可以通过简单的预处理器定义来克服的。 两个操作系统还支持管道上的非阻塞IO和使用select()的IO多路复用。

普通的旧TCP应该能够有效地工作; 据我所知,现代操作系统将检测TCP连接的两端何时位于同一台机器上,并将通过快速,轻量级(管道式)机制而不是通过普通TCP堆栈在内部路由该数据。

因此,如果您已经拥有适用于TCP的代码,我会坚持认为并避免花费大量额外的开发时间来获得不太高的回报。

它可能有点过分,但您可以使用Apache Portable Runtime; 这里是线程和进程函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM