在这种情况下,我需要在同步应用程序中引入异步行为。
更详细地说,有一个单片c++应用程序,它可以同步生成复杂衍生产品的定价。这个c++应用程序附带了一个java包装器,我的应用程序使用它来与之交互。
当前设计
My APP <------> Java Wrapper <---> C++ application由于从java包装器到c++的调用是同步的,因此我希望通过拥有这些java包装器的集群来创建一个异步行为。
我将有一个“主包装器”,它将决定(以循环方式或基于来自集群的一些实时信息)哪个单独的包装器获得请求。
未来设计
<---> Java Wrapper <---> C++ application
My APP <------> Java Master Wrapper <---> Java Wrapper <---> C++ application
<---> Java Wrapper <---> C++ application你们中有谁有构建这种东西的经验吗?任何建议,链接到教程,代码等将是最有帮助的。
干杯
仅供参考,我简单地看了一下terracotta,它似乎是我所需要的,但它不是一个选项(不是我公司批准的产品)。
发布于 2010-07-02 23:23:32
如果'Java Master Wrapper‘和'My App’在同一个JVM中,您可以让Java Master Wrapper将定价结果存放在My APP线程使用的共享数据结构中。如果我的应用程序是不同的进程/JVM,您可以使用JMS来分发结果。ActiveMQ是一个JMS提供者。
发布于 2012-02-11 05:10:31
C++应用程序是作为一个JNI库函数集调用的,还是一个进程?您可以简单地考虑派生C++的子进程(给它一个main()),并在单个JVM多线程中使用它的输出。与协调多个JVM相比,C++程序在单独的进程中可能会有更好的机会。
发布于 2010-07-03 11:38:09
看起来你要找的不是集群,而是一个池。
如果包装器可以在与主线程相同的/worker中执行,那么任务就是重用任何可用的thread pool包装器实现。您甚至可以反编译包装器以查看它的main()方法实际调用了哪些类,并尝试在您的应用程序中重新生成它。为CORBA应用程序做了这件事,工作正常。
如果每个包装器必须位于不同的JVM中,最简单的方法是(再次)分配线程池,其中每个线程监视自己的进程对象实例,将请求写入标准输入,从标准输出读取响应。
当然,每连接一个线程并不是最有效的设计,所以当您让它工作时,当一个小的线程池(甚至一个线程)使用Selector监视一个更大的包装器流程实例池时,您实际上可能会转移到一个模型。
https://stackoverflow.com/questions/3166896
复制相似问题