首页
学习
活动
专区
圈层
工具
发布

JVM集群
EN

Stack Overflow用户
提问于 2010-07-02 23:04:44
回答 3查看 711关注 0票数 4

在这种情况下,我需要在同步应用程序中引入异步行为。

更详细地说,有一个单片c++应用程序,它可以同步生成复杂衍生产品的定价。这个c++应用程序附带了一个java包装器,我的应用程序使用它来与之交互。

当前设计

代码语言:javascript
复制
My APP <------> Java Wrapper <---> C++ application

由于从java包装器到c++的调用是同步的,因此我希望通过拥有这些java包装器的集群来创建一个异步行为。

我将有一个“主包装器”,它将决定(以循环方式或基于来自集群的一些实时信息)哪个单独的包装器获得请求。

未来设计

代码语言:javascript
复制
                                    <---> Java Wrapper <---> C++ application
My APP <------> Java Master Wrapper <---> Java Wrapper <---> C++ application
                                    <---> Java Wrapper <---> C++ application

你们中有谁有构建这种东西的经验吗?任何建议,链接到教程,代码等将是最有帮助的。

干杯

仅供参考,我简单地看了一下terracotta,它似乎是我所需要的,但它不是一个选项(不是我公司批准的产品)。

EN

回答 3

Stack Overflow用户

发布于 2010-07-02 23:23:32

如果'Java Master Wrapper‘和'My App’在同一个JVM中,您可以让Java Master Wrapper将定价结果存放在My APP线程使用的共享数据结构中。如果我的应用程序是不同的进程/JVM,您可以使用JMS来分发结果。ActiveMQ是一个JMS提供者。

票数 1
EN

Stack Overflow用户

发布于 2012-02-11 05:10:31

C++应用程序是作为一个JNI库函数集调用的,还是一个进程?您可以简单地考虑派生C++的子进程(给它一个main()),并在单个JVM多线程中使用它的输出。与协调多个JVM相比,C++程序在单独的进程中可能会有更好的机会。

票数 1
EN

Stack Overflow用户

发布于 2010-07-03 11:38:09

看起来你要找的不是集群,而是一个池。

如果包装器可以在与主线程相同的/worker中执行,那么任务就是重用任何可用的thread pool包装器实现。您甚至可以反编译包装器以查看它的main()方法实际调用了哪些类,并尝试在您的应用程序中重新生成它。为CORBA应用程序做了这件事,工作正常。

如果每个包装器必须位于不同的JVM中,最简单的方法是(再次)分配线程池,其中每个线程监视自己的进程对象实例,将请求写入标准输入,从标准输出读取响应。

当然,每连接一个线程并不是最有效的设计,所以当您让它工作时,当一个小的线程池(甚至一个线程)使用Selector监视一个更大的包装器流程实例池时,您实际上可能会转移到一个模型。

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

https://stackoverflow.com/questions/3166896

复制
相关文章

相似问题

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