首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于消息队列与共享内存在这种情况下的适用性或适用性

关于消息队列与共享内存在这种情况下的适用性或适用性
EN

Stack Overflow用户
提问于 2012-11-23 11:58:34
回答 2查看 504关注 0票数 2

这涉及到消息队列与共享内存在这种情况下的适用性或适用性:

  1. 多个DLL或共享库
  2. 每个库将尝试与我的主应用程序DLL或共享库进行通信,例如,来自所有DLL或共享库的I/P和O/P将通过我的主应用程序的共享库进行通信。这些通信是异步的。
  3. 除了我的应用程序的.so之外,一些DLL或共享库将创建多个线程,每个这样的线程的输出需要传递回我的应用程序库。这些线程的输出同样是异步的。
  4. 我的主要应用程序DLL / .so将继续它的其他工作,这很可能是它通过网络与某个服务器进行通信并作出相应的响应。
  5. 所有其他DLL/..so的功能都是异步的

问题1:在上述情况下,哪一种最适合?(I)讯息队列,(II)共用记忆体?

Q-2:使用共享内存在多个共享库之间强制同步的引用或链接?

EN

回答 2

Stack Overflow用户

发布于 2012-11-23 14:32:15

我想你对这个问题的理解是错误的:

  • 共享内存是连接不同进程(如套接字、管道或普通内存)的“通道”。
  • 消息队列是传递消息的“协议”,如TCP或环形缓冲区。您可以在共享或“正常”内存中通过套接字(如0MQ)或使用同步队列(如Intel TBB,见下文)创建它。

您不需要具有您所提供的规范的共享内存。如果下列情况之一为真,则共享内存是有用的:

  • 您有几个进程(没有,所有的so/dll都将共享相同的内存)
  • 如果进程崩溃,则需要持久化进程的内存(您可能需要这样做,但没有提到)。

现在,您需要为您的代码选择一个协议来讨论它。我建议使用英特尔线程构建块(TBB,这将回答Q2)。它们为您想要实现的目标提供了不同层次的抽象,我不知道如何为您选择,不过,需要一些时间来阅读(长)文档。

票数 1
EN

Stack Overflow用户

发布于 2012-11-23 16:19:23

请注意,我只在最一般的意义上理解您的应用程序,我认为消息队列是一个不需要考虑的问题,只要您传递的消息是有界的,并且适合队列使用。

您似乎关心的两个主要问题是同步和异步性。(1) POSIX消息队列已内置队列同步。这是一个很大的头痛去除。(2)在Linux下,队列id mqd_t是一个文件描述符,这意味着它可以在select语句中使用。这就解决了异步问题。在主DLL中,您可以在mqd_t语句中加载所有队列的select描述符,并在DLL消息以一致、调试和理解的机制到达时处理它们。(3)与共享内存相比,与共享内存相比,您损失的效率微乎其微(对于大多数应用程序来说都是微乎其微),这不仅仅是由于msg队列使用相对容易,而且您的主应用程序DLL无论如何都要在网络I/O上花费相当长的时间等待服务器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13528699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档