问题标签 [message-passing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1627 浏览

c++ - 游戏消息传递系统的选项

我正在开发针对手持硬件(Pandora)的 C++ RTS 游戏。作为参考,Pandora 有一个约 600Mhz 的 ARM 处理器并运行 Linux。我们正在尝试建立一个好的消息传递系统(内部和外部),这对我来说是一个新领域。

举一个我们想传递的信息的例子可能会有所帮助。一个单元可以进行这个调用来将它的模型加载到内存中:

sendMessage("model-loader", "load-model", my_model.path, model_id );

作为回报,该单元可以期待某种包含特定 model_id 的模型对象的消息,然后可以将其传递给图形系统。请注意,这个 sendMessage 函数绝不是最终的。它只是反映了我目前对消息传递系统的理解,这可能是不正确的:)

据我所知,有两种截然不同的选择。一种是在内存中传递消息,只有在需要与外部机器对话时才通过网络。我喜欢这个想法,因为开销似乎很低,但这里的大问题是您似乎需要在消息队列上广泛使用互斥锁。如果可能的话,我真的很想避免过度锁定。我已经阅读了一些实现简单队列而不加锁的方法(依靠原子int操作),但这些方法假设一个队列只有一个读取器和一个写入器。这对我们的特定情况似乎没有用,因为一个对象的队列将有许多写入者和一个读取者。

另一种选择是完全越过网络层。这有一些有趣的优势,比如几乎免费的异步消息传递。此外,我们获得了使用与本地传递完全相同的调用将消息传递给其他机器的能力。但是,这个解决方案让我很不爽,可能是因为我不完全理解它:) 我们是否需要为每个将要发送/接收消息的对象提供一个套接字?如果是这样,这似乎是多余的。一个给定的游戏将有数千个对象。对于像 Pandora 这样动力不足的设备,我担心像这样滥用网络可能最终成为我们的瓶颈。但是,我还没有进行任何测试,所以这只是猜测。

MPI 似乎在消息传递方面很受欢迎,但对于我们想要的东西来说,它确实感觉有点矫枉过正。此代码永远不会触及集群或需要进行大量计算。

非常感谢您对我们有哪些选择来实现这一点的任何见解。

0 投票
3 回答
8998 浏览

c# - OOP - C# 中的消息传递

C#中OOP概念“消息传递”的例子是什么(调用方法/传递参数/触发事件/处理事件/???),为什么称为消息传递?

0 投票
1 回答
234 浏览

c# - 在 C# 中不同进程之间传递消息的禁食方法是什么?

我有一堆由 Microsoft 插件框架加载的插件,它们都在单独的进程中。

数据包从一侧进入(也是一个插件),然后被发送到一个控制器(也是一个插件),该控制器协调数据包的过程。然后,控制器根据从最后一个 AddIn 接收到的内容和结果,将数据包一一发送给多个其他 AddIn。

我的问题是,AddIn 框架的通信层是否会成为执行此操作的最快方法,或者我是否会使用命名管道或 net tcp 或完全不同的东西从 WCF 获得更好的性能?

0 投票
4 回答
4714 浏览

concurrency - 是什么让 Erlang 适合软实时应用程序?

一些背景

我正在为数字媒体编程构建一种编程语言,它应该支持使用非共享消息传递和软实时的并发性(即尽最大努力在不丢失样本或帧且吞吐量恒定的情况下计算音频/视频) .

事实证明,这两个特性很难结合起来,主要是因为一个特殊的限制:实时代码不应该动态分配内存。

我的语言应该可以很容易地实现这样的东西:

  • 一个线程根据参数计算音频样本。例如,这些可以是合成器的不同控件的值。该线程“实时”运行。
  • 一个线程从用户或另一台计算机接收输入以更改这些值。这可能是 GUI 线程,例如,对用户用鼠标转动旋钮做出反应。

我希望用户设置的新值通过队列发送到合成器引擎。现在,如果我只想发送浮点数和其他原子值,问题就不会有趣了。实际上,我希望任何类型的数据都能够从一个线程流向另一个线程,甚至是复杂的对象或数据结构,这对于任何线程和优先级的配置都应该是可能的。如果没有实时方面的动态内存分配,如果不对程序员施加看似任意的限制,这将变得非常困难。

Erlang 经常被宣传为非常适合实时系统。然而,我的理解是 Erlang 永远不会禁止内存分配。如果我也这样做,那么很多问题就会消失,但代价是在执行这些分配的代码中引入了不确定的时间。

问题

那么是什么让 Erlang 如此适合呢?它是否实施了特殊技巧来规避内存分配引起的问题,还是完全忽略了这个问题?是否采用另一种实时方法?

一个例子来说明这个问题

假设我们正在用 Erlang 编写一个合成器,它必须每 50 毫秒产生 64 个样本,否则声音中会出现破裂和爆裂声。我们还假设当我在字符串上移动一些滑块时,必须将一个小对象(假设它是一个列表或包含参数名称和新值的元组)从 GUI 进程发送到音频进程,其中一个副本被创建。这将需要动态内存分配。Erlang 如何帮助我确保这种分配不会延迟我的音频计算?

0 投票
6 回答
3830 浏览

java - 消息传递(例如 JMS)何时可以替代多线程?

我在一个数据处理应用程序中工作,在该应用程序中,通过将多个工作单元放在消息驱动 bean (MDB) 的多个实例侦听的消息队列上来实现并发。除了以这种方式实现并发之外,我们没有任何特定理由使用消息传递基础架构和 MDB。

这让我想到为什么使用多个线程无法实现相同的效果。

所以我的问题是,在什么情况下可以使用异步消息传递(例如 JMS)作为多线程的替代方法来实现并发?使用一种方法相对于另一种方法有哪些优点/缺点。

0 投票
2 回答
1357 浏览

.net - OpenCV 多线程线程消息

我正在使用 .Net 3.5 和OpenCV 1.1编写程序。我有多个线程需要从计算机上的网络摄像头获取图像变量,问题是当多个线程尝试同时访问摄像头时出现内存冲突错误。我知道我可以使用 PostThreadMessage 和 GetMessage 将变量发送到线程。谁能给我一个教程或示例,说明如何在使用PostThreadMessageand运行时将变量传递给线程GetMessage

当我的两个工作线程都尝试调用从相机获取图像的函数时,我得到的错误是内存访问冲突错误。我想通过让一个线程获取所有其他线程的图像来解决这个问题。它们每个都有一个IplImage变量,用于存储相机捕获的图像。希望这可以帮助。

0 投票
1 回答
811 浏览

c# - 通过 cmd 行传递消息的单实例应用程序?

我有一个通过命令行启动的 C# 应用程序。通常数据是通过命令行传递的,例如 add ( app -a string)。我希望只打开一个应用程序实例,如果通过命令行添加更多字符串,我希望单个实例了解它并自行更新。我可以将数据正确地放入数据库,然后对正在运行的实例进行 msg 或 msg 并将数据传递给正在运行的实例并让它将其放入数据库中并自行更新。

我将如何在 C# .NET 中执行此操作?(3.5)

0 投票
5 回答
668 浏览

objective-c - Objective-C“消息”——阅读它的正确方法是什么?

基本上,您可以在 Objective-c 中声明一个方法并将每个参数命名两次。

我知道这很强大,但我不太确定如何使用它......

当约翰向凯利打招呼时:

[ p Greet:"John" toPerson:"Kelly" greetWith:"hey babe" ] ;

关于它的某些内容不自然地阅读。我不确定一个有经验的 Objective-c 程序员是否会这样写那个“信息”。

有人可以解释每个参数有两个名称的原因,并且可能是一个更有用的例子来说明如何有效地在程序中赋予意义?

还有一些事情让我感到困扰,那就是第一个参数的名称与“消息”的名称基本相同。您如何通过编写有意义且易于理解的方法/“消息名称”来解决这个问题?

0 投票
10 回答
80222 浏览

concurrency - 消息传递和共享内存并发模型有什么区别?

如果我错了,请纠正我,但我很惊讶以前没有在这里问过这个问题......

0 投票
3 回答
3691 浏览

linux - How to choose the "Key" for inter-processes communication in Linux?

Good Day...

I am doing a homework which states that I have 5 processes; a server and the rest are clients. Each process is supposed to be sparked from a different executable. I am going to implement a two-way message passing solution, but the question is not about message passing per se. Is there an elegant way to communicate the key between those different executables. i.e. when I call the following function:

How are other processes supposed to know the key?

It is OK for my homework to use a predetermined key, but I would like to know how it could be done in a real program. Because What "I understand" is there could happen a conflict if an unrelated process asks for the my key in some user's machine.